[英]back button navigation with fragments
我正在構建一個有點畫廊的應用程序。 我使用一個活動來保存fragment_1,在其中我在recyclerview中顯示圖像。 我可以從fragment_1轉到fragment_2。 兩個片段都有各自不同的工具欄。 我希望通過按工具欄中的向后箭頭,從fragment_2返回fragment_1。
我如何從fragment_1轉到fragment_2:
Fragment2 fragment2 = new Fragment2();
getActivity().getSupportFragmentManager().beginTransaction()
.replace(R.id.container, fragment2)
.addToBackStack(null).commit();
我在fragment_2中已經做了什么:
Toolbar toolbar = getView().findViewById(R.id.toolbar_2);
((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);
((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayShowHomeEnabled(true);
這不起作用:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
getActivity().onBackPressed();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
如果要從片段中觸發onOptionsItemSelected
,則需要將setHasOptionsMenu
設置為true
,例如從onViewCreated
:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
setHasOptionsMenu(true);
}
使用popBackStack()方法從后堆棧中刪除片段。 嘗試使用以下代碼:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
getActivity().getSupportFragmentManager().popBackStack();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
getActivity().getSupportFragmentManager().beginTransaction()
.replace(R.id.container, new fragment1).commit();
return true;
default:
return super.onOptionsItemSelected(item);
} }
如果每個片段在自己的布局中都有Toolbar
,則可以在onViewCreated
View
在onCreateView
膨脹后輕松訪問onViewCreated
Toolbar
。 之后,您可以設置導航圖標並調用setNavigationOnClickListener
。 在里面你可以選擇從幾個方法既可以取代退出Fragment
通過新的Fragment
或remove
現有的Fragment
或使用popBackStack
。 在看起來像這樣的代碼中:
Toolbar toolbar = view.findViewById(R.id.toolbar) // id of your toolbar
toolbar.setNavigationIcon(R.drawable.ic_arrow_back_white_24dp); // set the back arrow in toolbar
//set click listener on back arrow
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
getFragmentManager().popBackStack();
});
要使用這個方法,你需要添加Fragment
在沒有空addToBackStack
。 例如:
getFragmentManager().beginTransaction()
.add(R.id.container, your fragment here)
.addToBackStack("BackStack").commit();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.