Android 选项卡式操作栏中的片段导航
问题 在描述当前设置之前,我将描述我的问题。我需要在单独选项卡内的片段之间进行分层导航。假设我在一个选项卡中向下钻取,然后切换选项卡,然后返回到第一个原始选项卡,我需要它位于向下钻取的级别,然后能够返回到该选项卡的顶层 现在进入我的设置。 我有一个应用程序,它有一个名为Android 选项卡式操作栏中的片段导航,android,android-fragments,android-tabs,Android,Android Fragments,Android Tabs,问题 在描述当前设置之前,我将描述我的问题。我需要在单独选项卡内的片段之间进行分层导航。假设我在一个选项卡中向下钻取,然后切换选项卡,然后返回到第一个原始选项卡,我需要它位于向下钻取的级别,然后能够返回到该选项卡的顶层 现在进入我的设置。 我有一个应用程序,它有一个名为MainActivity的活动。此活动控制我的选项卡式操作栏。我已经学习了许多不同的教程来处理选择选项卡时片段的切换,下面的代码可以让您注意onTabSelected和onTabUnselected方法 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, String tag, 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();
}
}
我的想法
我想这一定是我分离碎片的方式,当按下一个新标签时处理切换。也许我需要实现一些方法来存储每个选项卡的每个单独的backbackback,并从中加载片段,而不是从系统back堆栈中加载
任何帮助都会很好。我试图尽可能彻底和简单地解释它
提前感谢。好的,所以经过一点实验后,我决定使用枚举类型实现一个自定义的backbackback 我有两种枚举类型:一种是
ViewType
类型,另一种是CurrentTab
类型。CurrentTab
类型告诉我当前正在查看的选项卡,ViewType
告诉我在这些选项卡中正在查看的视图。对于我必须存储在层次结构中的每个选项卡,我都有一个视图类型的实例
为了实现backback,我覆盖了按下back按钮时调用的方法
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
return true;
}
return super.onKeyDone(keyCode,event);
}
所以在它检查back按钮的地方,我把代码放在检查当前选项卡和单独的视图类型的地方。这样我知道我在哪里,如果我后退,我知道我需要去哪里
我希望这对任何问题都有帮助,只需发表评论。您可以使用Activity.onBackPressed()方法
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
return true;
}
return super.onKeyDone(keyCode,event);
}