簡體   English   中英

標題欄中的后退導航-片段

[英]Back navigation in title bar - fragment

像這樣問了很多問題,但是我嘗試過的一切似乎都不起作用。 本質上,我有一個主要活動,該活動根據用戶單擊的內容(默認為home片段)調用不同的片段。 我想在標題欄上有一個后退按鈕,以返回上一個片段。

我的片段是從主要活動中調用的,如下所示:

    Fragment fragment = null;
    fragment = new nextFragment();

    if (fragment != null) {
        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

        fragmentTransaction.replace(R.id.frame_container, fragment).addToBackStack(null);
        fragmentTransaction.commit();
        fragmentTransaction.addToBackStack(null);

    } else {
        // error in creating fragment
        Log.e("MainActivity", "Error in creating fragment");
    }

但是由於不贊成使用ActionBarActivity活動,因此我需要擴展AppCompatActivity而不是FragmentActivity,以便可以使用actionbar(我假設這是我需要的)。 但是,然后我無法切換到我的片段。 因此,有人知道我如何在片段中實現后退按鈕,或者在這種情況下如何使用AppCompatActivity。 謝謝你的幫助。

如果您擴展AppCompatActivity請嘗試以下操作:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Include these 2 lines ONLY if need to use Toolbar from layout xml as Action Bar
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        //Add back navigation in the title bar
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        //
        //Other works to be done in onCreate.....
        //
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == android.R.id.home) {
            //Title bar back press triggers onBackPressed()
            onBackPressed();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    //Both navigation bar back press and title bar back press will trigger this method
    @Override
    public void onBackPressed() {
        if (getFragmentManager().getBackStackEntryCount() > 0 ) { 
            getFragmentManager().popBackStack(); 
        } 
        else { 
            super.onBackPressed(); 
        }
    }
}

您已保存通過調用使用的最后一個片段

addToBacktack(null).commit()

因此,下一步要調用它的方法是在托管該片段的活動中重寫onBackPressed()

@Override
public void onBackPressed() {
    if (getFragmentManager().getBackStackEntryCount() > 0 ){
        getFragmentManager().popBackStack();
    }
    else {
        super.onBackPressed();
    }
}

因此,每當您從片段中調用活動的onBackPressed() ,該片段都會返回到最后保存的片段。

要在標題欄中添加“后退按鈕”,必須將以下代碼添加到Fragment中。

 Toolbar toolbar = (Toolbar)view.findViewById(R.id.app_bar);
 AppCompatActivity AppCompatActivity = (AppCompatActivity)getActivity();
 AppCompatActivity.setSupportActionBar(toolbar);
 AppCompatActivity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    return view;
}

不要忘記將MainActivity擴展到AppCompatActivity。

然后,您必須在我的Fragment類中使用此Java代碼,以使用戶做出反應,點擊操作欄中的后退/向上圖標。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
    case android.R.id.home:            
        getActivity().onBackPressed();
        return true;
    default:
        return super.onOptionsItemSelected(item);
}
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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