反推android片段导航
以下是我使用导航抽屉显示片段的方式:反推android片段导航,android,android-fragments,fragment-backstack,Android,Android Fragments,Fragment Backstack,以下是我使用导航抽屉显示片段的方式: private void displayView(int position) { // update the main content by replacing fragments Fragment fragment = null; switch (position) { case 0: fragment = new Fragmen
private void displayView(int position) {
// update the main content by replacing fragments
Fragment fragment = null;
switch (position) {
case 0:
fragment = new Fragment0();
break;
case 1:
fragment = new Fragment1();
break;
case 2:
fragment = new Fragment2();
break;
case 3:
fragment = new Fragment3();
break;
case 4:
fragment = new Fragment4();
break;
case 5:
fragment = new Fragment5();
}
default:
break;
}
if (fragment != null) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frame_container, fragment)
.addToBackStack(null)
.commit();
// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
mDrawerList.setSelection(position);
setTitle(navMenuTitles[position]);
mDrawerLayout.closeDrawer(drawerll);
} else {
// error in creating fragment
Log.e("MainActivity", "Error in creating fragment");
}
}
假设用户导航到片段2->片段5->片段3。
如果用户单击后退按钮
我需要有降序
,在每个片段上,当用户转到特定的片段时,我显示片段的名称
,即:
片段3->片段5->片段2。
这就是我尝试过的:
第一种方法:
FragmentManager fm = getSupportFragmentManager();
int count = fm.getBackStackEntryCount();
for(int i = 0; i < count; ++i) {
fm.popBackStackImmediate();
}
fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
我无法使此工作**(即,我无法将其移回我来自**的片段),也无法显示基于backbackback的片段名称
非常感谢您的帮助。请尝试以下方法:
if (fragment != null) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frame_container, fragment).commit();
menuList.setItemChecked(position, true);
menuList.setSelection(position);
}
在保存片段的活动中,通过
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
getSupportFragmentManager().popBackStack();
getSupportFragmentManager().beginTransaction().commit();
}
else {
super.onBackPressed();
}
}
1.退后
您可以在onBackPressed
中使用getSupportFragmentManager().popBackStack()
方法:
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
getSupportFragmentManager().popBackStack();
getSupportFragmentManager().beginTransaction().commit();
}
else {
super.onBackPressed();
}
}
不要忘记在BackStack中添加片段,如:
transaction.addToBackStack(null);
2.显示名称
要在actionbar中显示当前片段名称,您可以在片段的onResume
上获取它:
@Override
protected void onResume() {
super.onResume();
((FrgmentActivtiyName)getActivity).changeTitle("title");
}
定义一种方法,用于在活动中的actionbar中设置标题:
public void changeTitle(String titleToSet) {
// set title as titleToSet
}
希望能有帮助ツ 我想你的导航系统运行得很好,你面临的问题是你可以使用的标题
public class SampleFragment extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Creating view correspoding to the fragment
View v = inflater.inflate(R.layout.fragment_layout, container, false);
// Updating the action bar title
getActivity().getActionBar().setTitle("Screen name");
return v;
}
}
在每一个片段中。每当你按下backpress时,fragmemt的onCreateView方法(从Backback弹出的方法)被调用,标题将再次设置为替换旧标题 可能是helpful@SweetWisherシ-我在这一行得到错误Fragment Fragment=fragManager.getFragments().get(计数>0?计数-1:count);声明FragmentManager的getFragments未定义,我认为您的Backback工作正常。您可以以相同的方式导航回Gone。如果您想获取堆栈计数,可以使用getSupportFragmentManager().GetBackBackbackEntryCount()方法是的,但是我如何设置标题,因为在单击BackButton时标题不会更改您需要使用getSupportFragmentManager()
ie v4。Fragment@Bhargav-在这里我如何得到碎片的位置?我不认为这是必要的,因为他有所有的碎片在后台能够显示在相同的顺序,当导航回来。因此,无需从中添加或删除任何片段stack@SweetWisherシ- 阿伦说的是对的。我可以展示它们,但问题在于标题。这句话的意思是:我无法让它工作(即,我无法将它移回我所来自的片段),也无法根据背景显示片段的名称。上面说你不能搬回去