在我描述我当前的设置之前,我将描述我的问题.我需要在单独的标签内的片段之间进行分层导航.假设我在选项卡中向下钻取,我然后切换选项卡,然后返回到第一个原始选项卡,我需要它在钻取的下层,然后能够返回到顶层标签.
现在进入我的设置.
我有一个名为MainActivity的活动的应用程序.此活动控制我的选项卡式 *** 作栏.我选择了一个选项卡时,我已经按照许多不同的教程来处理片段的切换,下面的代码可以引起您对onTabSelected和onTabUnselected方法的注意.
MainActivity – 标签监听器
public static class MyTabListener<T extends Fragment> implements Actionbar.TabListener { private final Activity mActivity; private final String mTag; private final Class<T> mClass; private final Bundle mArgs; private Fragment mFragment; public MyTabListener(Activity activity,String tag,Class<T> clz) { this(activity,tag,clz,null); } public MyTabListener(Activity activity,Class<T> clz,Bundle args) { mActivity = activity; mTag = tag; mClass = clz; mArgs = args; // Check to see if we already have a fragment for this tab,probably // from a prevIoUsly saved state. If so,deactivate it,because our // initial state is that a tab isn't shown. mFragment = mActivity.getFragmentManager().findFragmentByTag(mTag); if (mFragment != null && !mFragment.isDetached()) { FragmentTransaction ft = mActivity.getFragmentManager().beginTransaction(); ft.detach(mFragment); ft.commit(); } } public voID onTabSelected(Tab tab,FragmentTransaction ft) { Log.e("FRAGMENT","Selected Fragment With Tag " + mTag); if (mFragment == null) { mFragment = Fragment.instantiate(mActivity,mClass.getname(),mArgs); ft.add(androID.R.ID.content,mFragment,mTag); } else { ft.attach(mFragment); } } public voID onTabUnselected(Tab tab,FragmentTransaction ft) { if (mFragment != null) { ft.detach(mFragment); } } public voID onTabReselected(Tab tab,FragmentTransaction ft) { Toast.makeText(mActivity,"Reselected!",Toast.LENGTH_SHORT).show(); }}
当我在Tab1上查看Fragment1’时,当按下一个按钮时,我会显示另一个我需要能够返回的FragmentcalledFragment2`.下面的代码可以工作,如果我只是停留在该选项卡上,但是当从选项卡导航并返回到它时,一切都搞砸了.
MainActivity – 显示第二个片段
Fragment tdFrag = Fragment.instantiate(this,SecondFragment.class.getname()); FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.replace(androID.R.ID.content,tdFrag,"secondfrag"); ft.addToBackStack(null); ft.commit();
我的想法
我认为这必须是我分离片段并在按下新标签时处理切换的方式.也许我需要为每个选项卡实现一些存储每个单独的backstack并从中加载片段而不是系统后端堆栈的方法?
任何帮助都会很棒.我试图尽可能彻底和简单地解释它.
提前致谢.
解决方法 好的,经过一些实验,我决定使用枚举类型实现自定义backstack.我有两种类型的枚举类型:VIEwType和CurrentTab类型. CurrentTab类型告诉我当前正在查看哪个选项卡,VIEwType告诉我这些选项卡中正在查看哪个视图.我有一个VIEwType的实例,我必须存储每个选项卡,我在这里的层次结构.
要实现backstack,我会覆盖按下后退按钮时调用的方法.
public boolean onKeyDown(int keyCode,KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { return true; } return super.onKeyDone(keyCode,event);}
因此,在检查后退按钮的位置,我将代码检查当前选项卡和单独的视图类型.这样我知道我在哪里,如果我退后,我知道我需要去哪里.
我希望这有助于任何问题发表评论.
总结以上是内存溢出为你收集整理的android – 选项卡式 *** 作栏内的片段导航全部内容,希望文章能够帮你解决android – 选项卡式 *** 作栏内的片段导航所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)