[英]Android use backstack with fragments
今天,我在使用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>
我希望你能幫幫我..:)
編輯
為了更好地理解,我添加了一張圖片:
您應該使用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
事件。 檢查那里的代碼,確保您沒有手動完成活動。
而不是刪除並添加嘗試替換片段:
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();
和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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.