今天我使用android时遇到了另一个问题。
首先,我有一个具有登录活动的应用程序。因此,当我的凭据正确时,我会使用意图开始一项新活动。所以现在你看到一个标签栏。当我调用我的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(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.produkte_gridmain, container, false);
mGV = (GridView) v.findViewById(R.id.gridView1);
mGV.setAdapter(new ImageAdapter(getActivity(), CATEGORY));
mGV.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
FragmentManager fm = getFragmentManager();
Fragment frag = fm.findFragmentById(R.id.container);
FragmentTransaction tr = fm.beginTransaction();
switch (position) {
case 0: {
// startActivity(new Intent(MyGrid.this,
// MainActivity.class));
ProdukteList f = new ProdukteList();
tr.remove(frag);
tr.add(R.id.container, f,f.getTAG());
tr.addToBackStack(f.getTAG());
}
break;
}
tr.commit();
}
});
return 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>
我希望你能帮助我.. :)
修改
为了更好地理解,我添加了一张图片:
答案 0 :(得分:0)
您应该使用replace
代替remove
和add
fragment
而不是:
tr.remove(frag);
tr.add(R.id.container, f,f.getTAG());
使用此:
tr.replace(R.id.container, f,f.getTAG());
并检查您的活动是否override
onBackPressed
。检查代码,确保您没有手动完成活动。
答案 1 :(得分:0)
而不是删除并添加尝试替换片段:
fragmentTransaction.replace(..............);
transaction.addToBackStack(null);
fragmentTransaction.commit();
答案 2 :(得分:0)
如果它可以帮助你,通常我会做这样的过渡:
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();
和BackTrack例如:
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);
}