Android使用带有片段的backbackback
今天我在使用android时遇到了另一个问题 首先,我有一个应用程序,它有一个登录活动。因此,当我的凭证正确时,我会使用意图启动一个新的活动。现在你看到一个tabbar。当我调用我的onTabSelected()方法时,我删除了当前片段,并显示一个gridview。如果我点击这个gridview中的一个元素,片段就会被替换,我的应用程序就会深入到另一个片段中(一个带有另一个细节片段的可扩展列表) 因此,我的问题是,如果我现在点击后退按钮,应用程序将返回到我的第一个活动(登录活动),而不是最后一个片段,即网格视图Android使用带有片段的backbackback,android,gridview,android-fragments,back-stack,Android,Gridview,Android Fragments,Back Stack,今天我在使用android时遇到了另一个问题 首先,我有一个应用程序,它有一个登录活动。因此,当我的凭证正确时,我会使用意图启动一个新的活动。现在你看到一个tabbar。当我调用我的onTabSelected()方法时,我删除了当前片段,并显示一个gridview。如果我点击这个gridview中的一个元素,片段就会被替换,我的应用程序就会深入到另一个片段中(一个带有另一个细节片段的可扩展列表) 因此,我的问题是,如果我现在点击后退按钮,应用程序将返回到我的第一个活动(登录活动),而不是最后一个
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
FragmentManager fm = getFragmentManager();
Fragment frag = fm.findFragmentById(R.id.container);
FragmentTransaction tr = fm.beginTransaction();
switch (tab.getPosition()) {
case 1: {//Produkte
ProdukteGrid pg = new ProdukteGrid();
if(frag != null)
tr.remove(frag);
tr.add(R.id.container, pg,pg.getTAG());
tr.addToBackStack(pg.getTAG());
}
。。。
我的网格:
public View onCreateView(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图v=充气机。充气(R.layout.produkte_gridmain,容器,假);
mGV=(GridView)v.findViewById(R.id.GridView 1);
mGV.setAdapter(新的ImageAdapter(getActivity(),CATEGORY));
mGV.setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父视图、视图v、,
内部位置,长id){
FragmentManager fm=getFragmentManager();
Fragment frag=fm.findFragmentById(R.id.container);
FragmentTransaction tr=fm.beginTransaction();
开关(位置){
案例0:{
//startActivity(新意图)(MyGrid.this,
//MainActivity.class);
ProdukteList f=新的ProdukteList();
tr.remove(frag);
tr.add(R.id.container,f,f.getTAG());
tr.addToBackStack(f.getTAG());
}
打破
}
tr.commit();
}
});
返回v;
}
我的主要布局
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
</FrameLayout>
我希望你能帮助我……)
编辑
为了更好地理解,我添加了一张图片:
您应该使用
替换而不是删除和添加片段
与此相反:
tr.remove(frag);
tr.add(R.id.container, f,f.getTAG());
使用以下命令:
tr.replace(R.id.container, f,f.getTAG());
并检查是否在您的活动上覆盖了
onBackPressed
事件。检查代码,确保您没有手动完成活动。请尝试替换片段,而不是删除和添加:
fragmentTransaction.replace(..............);
transaction.addToBackStack(null);
fragmentTransaction.commit();
如果它能帮助你,我通常会这样做:
AlbumGridFragment fragment = new AlbumGridFragment();
getSupportFragmentManager().beginTransaction().setCustomAnimations(R.animator.anim_back_right, R.animator.anim_back_left, R.animator.anim_left, R.animator.anim_right)
.add(R.id.album_fragment, fragment).addToBackStack(MainFragmentActivity.ALBUM_GRID_TAG).commit();
以及回溯,例如:
FragmentManager fragmentManager = getSupportFragmentManager();
int stackSize = fragmentManager.getBackStackEntryCount();
if (stackSize == 0) {
finish();
}
else {
String fragmentTag = fragmentManager.getBackStackEntryAt(stackSize - 1).getName();
fragmentManager.popBackStack(fragmentTag, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
这是我的初衷。我这样做了,然后我在几个论坛上读到,尽管使用replace()还是使用remove()和add()可能更好,或者只针对最后一个片段?好的,添加片段应该与我的相同。在代码的哪一部分进行回溯?当按下后退按钮时?是的,我通常在父活动的onBackPressed()重写方法中执行此操作,所以在这种情况下,它会在gridview中吗?
FragmentManager fragmentManager = getSupportFragmentManager();
int stackSize = fragmentManager.getBackStackEntryCount();
if (stackSize == 0) {
finish();
}
else {
String fragmentTag = fragmentManager.getBackStackEntryAt(stackSize - 1).getName();
fragmentManager.popBackStack(fragmentTag, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}