(动作条)标签+寻呼机+详细ViewPager容器内的碎片 [英] (ActionBar) Tabs + Pager + detail Fragments inside ViewPager container

查看:114
本文介绍了(动作条)标签+寻呼机+详细ViewPager容器内的碎片的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有关ActionBarSherlock我想有(操作栏)选项卡+寻呼机。我用的片段寻呼机容器内。我已经得到了 http://actionbarsherlock.com/ 工作的例子,但我不能设法得到了寻呼机容器内部的细节片段当我点击,让我们说,在第一个片段一个列表项。

For ActionBarSherlock I would like to have (Action Bar) Tabs + Pager. I use Fragments inside that pager container. I already got the examples of http://actionbarsherlock.com/ working, but I can't manage to get a details fragment inside that pager container when I would click on let's say a listitem in the first fragment.

它是不可能有这样的事情:

Is it impossible to have something like this:

有标签和寻呼机集装箱活动

Activity with Tabs and pager container

  • TAB1下一个片段里面寻呼机容器
    • 单击的东西在片段A和片段展示中的B TAB1在同一个寻呼机的容器。
    • Fragment A inside pager container under Tab1
      • Click on something in Fragment A and show Fragment B in same pager container under Tab1.

      片段A是那么不可见的,只有片段B是可见的,而且所有的标签。

      Fragment A is then not visible, only Fragment B is visible, but also all the Tabs.

      目前,我认为只有一个新的活动(这将举行片段B里面),可以点击片段A.

      At the moment I think only a new activity (which would hold Fragment B inside it) can be started after clicking something in Fragment A.

      推荐答案

      下面是我的(标签+碎片+ ViewPager)解决方案,这是对我的作品,我想,  希望对您的工作以及

      Here is my solution for the (Tabs + Fragment + ViewPager) it is works for me as i wanted, hope that works for you as well

      下面是XML文件

      here is the xml file

       <LinearLayout
              android:id="@+id/linearLayout"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="horizontal" >
      
              <android.support.v4.view.ViewPager
                  android:id="@+id/pager"
                  android:layout_width="0dip"
                  android:layout_height="match_parent"
                  android:layout_weight="5" />
      
              <FrameLayout
                  android:id="@+id/fragment_details"
                  android:layout_width="0px"
                  android:layout_height="match_parent"
                  android:layout_weight="4.3" />
          </LinearLayout>
      

      这里是$ C $下MainActivity.java我会发布相关的code只所以你必须去管理它。

      here is the code for MainActivity.java I'll post relevant code only so you'll have to manage it

      public class MainActivity extends FragmentActivity implements
              DialogInterface.OnDismissListener, TabDataResponder {
      
          /** Called when the activity is first created. */
          @Override
          public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.main);
      
              getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
      
              artistTab = getSupportActionBar().newTab().setText(
                      R.string.tab_name_artist);
              albumTab = getSupportActionBar().newTab().setText(
                      R.string.tab_name_album);
              songTab = getSupportActionBar().newTab().setText(
                      R.string.tab_name_songs);
      
              map = new HashMap<String, Integer>();
              mViewPager = (ViewPager) findViewById(R.id.pager);
              FrameLayout deatil = (FrameLayout) findViewById(R.id.fragment_details);
              mDualPane = (deatil != null) && (deatil.getVisibility() == View.VISIBLE);
              mTabsAdapter = new TabsAdapter(this, getSupportActionBar(), mViewPager);
      
              if (savedInstanceState != null) {
                  flag = true;
                  index = savedInstanceState.getInt("index");
              }
      
              setUpTabView();
      
          }
      
      
          @Override
          protected void onSaveInstanceState(Bundle outState) {
              super.onSaveInstanceState(outState);
              outState.putInt("index", getSupportActionBar()
                      .getSelectedNavigationIndex());
          }
      
          private void setUpTabView() {
              mTabsAdapter.addTab(artistTab, ArtistFragment.class, null);
              mTabsAdapter.addTab(albumTab, AlbumFragment.class, null);
              mTabsAdapter.addTab(songTab, SongFragment.class, null);
              getSupportActionBar().setSelectedNavigationItem(index);
          }
      
          public static class TabsAdapter extends FragmentPagerAdapter implements
                  ViewPager.OnPageChangeListener, ActionBar.TabListener {
      
              private FragmentActivity mContext;
              private ActionBar mActionBar;
              private final ViewPager mViewPager;
      
              private final ArrayList<String> mTabs = new ArrayList<String>();
              private TabDataResponder responder;
      
              public TabsAdapter(FragmentActivity activity, ActionBar actionBar,
                      ViewPager pager) {
      
                  super(activity.getSupportFragmentManager());
                  mContext = activity;
                  mActionBar = actionBar;
                  mViewPager = pager;
      
                  // TabDataResponder is an interface which is implemented in MainActivity
                  // You can find implementation @ the last
      
                  responder = (TabDataResponder) activity;
                  mViewPager.setAdapter(this);
                  mViewPager.setOnPageChangeListener(this);
      
                  //I have used map to save state of the fragment
                  map.put(SongFragment.TYPE_FRAGMENT.trim(), 0);
                  map.put(AlbumFragment.TYPE_FRAGMENT.trim(), 0);
                  map.put(ArtistFragment.TYPE_FRAGMENT.trim(), 0);
              }
      
              public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args) {
                  mTabs.add(clss.getName());
                  // mArgs.add(args);
                  mActionBar.addTab(tab.setTabListener(this));
                  notifyDataSetChanged();
              }
      
              @Override
              public int getCount() {
                  return mTabs.size();
              }
      
              @Override
              public Fragment getItem(int position) {
                  return Fragment
                          .instantiate(mContext, mTabs.get(position), /*
                                                                       * mArgs.get(
                                                                       * position)
                                                                       */null);
              }
      
              @Override
              public void onPageScrolled(int position, float positionOffset,
                      int positionOffsetPixels) {
              }
      
              @Override
              public void onPageSelected(int position) {
                  Log.i(TAG, "PageSelected....");
                  mActionBar.setSelectedNavigationItem(position);
              }
      
              @Override
              public void onPageScrollStateChanged(int state) {
                  Log.i(TAG, "ScrollSateChanged....");
              }
      
              @Override
              public void onTabReselected(Tab tab, FragmentTransaction ft) {
              }
      
              @Override
              public void onTabSelected(Tab tab, FragmentTransaction ft) {
                  mViewPager.setCurrentItem(tab.getPosition());
                  String a = null;
                  if (mDualPane) {
                      a = mTabs.get(tab.getPosition());
                      responder.loadData(a, map.get(a));
                  }
              }
      
              @Override
              public void onTabUnselected(Tab tab, FragmentTransaction ft) {
                  Log.i(TAG, "Tab is released now....");
              }
          }
      
          @Override
          public void onDismiss(DialogInterface dialog) {
              setUpTabView();
      
          }
      //This interface must be call from fragment class 
      //@ the time of event you want to show detail 
      // pass the class name in the type argument using class.getName() method
          @Override
          public void loadData(String type, int index) {
              DetailFragment viewer = (DetailFragment) getSupportFragmentManager()
                      .findFragmentById(R.id.fragment_details);
              if (mDualPane) {
                  if (viewer == null || viewer.getShownIndex() != index
                          || viewer.getTypeFragment() != type) {
      
                      DetailFragment df = DetailFragment.newInstance(index, type);
                      getSupportFragmentManager()
                              .beginTransaction()
                              .replace(R.id.fragment_details, df)
                              .setTransition(
                                      FragmentTransaction.TRANSIT_FRAGMENT_FADE)
                              .commit();
                      map.put(type.trim(), index);
      
                  }
      
              } else {
                  Intent intent = new Intent();
                  intent.setClass(MainActivity.this, DetailActivity.class);
                  intent.putExtra("index", index);
                  intent.putExtra("type", type);
                  startActivity(intent);
              }
          }
      }
      

      这里是我如何处理的细节片段不是很有效,但那种工作

      public class DetailFragment extends Fragment{
      
          public static DetailFragment newInstance(int index, String  TYPE_FRAGMENT) {
              DetailFragment f = new DetailFragment();
      
              // Supply index input as an argument.
              Bundle args = new Bundle();
              args.putInt("index", index);
              args.putString("type", TYPE_FRAGMENT);
              f.setArguments(args);
      
              return f;
          }
      
      
      
          public int getShownIndex() {
              return getArguments().getInt("index", 0);
          }
      
          public String getTypeFragment(){
              String a = getArguments().getString("type");
              return a;
          }
      
      
          @Override
          public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
      
              //template is blank layout
              View view =  inflater.inflate(R.layout.template, container, false);
              if(getTypeFragment().equals(ArtistFragment.TYPE_FRAGMENT)){
                  view = null;
                  view = inflater.inflate(R.layout.artist_details, container, false);
                  //....
      
              }
              else if(getTypeFragment().equals(AlbumFragment.TYPE_FRAGMENT)){
      
                  //do's for album fragment
              }
              else if(getTypeFragment().equals(SongFragment.TYPE_FRAGMENT)){
                  //do's for song fragment
              }
              return view;
          }
      
      }
      

      不保存在其各自的片段选项卡的状态,它会产生冲突,我们已经在这里做

      这篇关于(动作条)标签+寻呼机+详细ViewPager容器内的碎片的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆