簡體   English   中英

帶有片段的后退按鈕導航

[英]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 ViewonCreateView膨脹后輕松訪問onViewCreated Toolbar 之后,您可以設置導航圖標並調用setNavigationOnClickListener 在里面你可以選擇從幾個方法既可以取代退出Fragment通過新的Fragmentremove現有的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM