(动作条)标签+寻呼机+详细ViewPager容器内的碎片 [英] (ActionBar) Tabs + Pager + detail Fragments inside ViewPager container
问题描述
有关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屋!