android – 选项卡式 *** 作栏内的片段导航

android – 选项卡式 *** 作栏内的片段导航,第1张

概述问题 在我描述我当前的设置之前,我将描述我的问题.我需要在单独的标签内的片段之间进行分层导航.假设我在选项卡中向下钻取,我然后切换选项卡,然后返回到第一个原始选项卡,我需要它在钻取的下层,然后能够返回到顶层标签. 现在进入我的设置. 我有一个名为MainActivity的活动的应用程序.此活动控制我的选项卡式 *** 作栏.我选择了一个选项卡时,我已经按照许多不同的教程来处理片段的切换,下面的代码可以引起 问题

在我描述我当前的设置之前,我将描述我的问题.我需要在单独的标签内的片段之间进行分层导航.假设我在选项卡中向下钻取,我然后切换选项卡,然后返回到第一个原始选项卡,我需要它在钻取的下层,然后能够返回到顶层标签.

现在进入我的设置.

我有一个名为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 – 选项卡式 *** 作栏内的片段导航所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1124555.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存