Android - 在处理带片段的导航时更新活动中的工具栏标题

Min*_*wzy 2 java android android-fragments

我有Activity托管的带有片段的幻灯片菜单,当用户点击slidemenu片段中的任何项目时,我需要处理后退导航

当用户点击列表中的项目时,我调用此方法来显示正确的片段

public void SelectItem(int position) {

        Fragment _fragment = null;
        switch (position) {
            case 0:
                _fragment = Test_Home.newInstance();
                break;

            case 1:
                _fragment = Diseases_Fragment.newInstance();
                break;

          ........

            case 8:
                Logout();
                break;

            default:
               break;

        }

        if (_fragment != null) {
            FragmentManager fragmentManager = getSupportFragmentManager();
            fragmentManager.beginTransaction().replace(R.id.view_content, _fragment).addToBackStack(null).commit();
             // set title , this textview in toolbar 
            _frag_title.setText(nav_items[position]);
            mDrawerLayout.closeDrawer(GravityCompat.START);
        }
Run Code Online (Sandbox Code Playgroud)

这个方法处理后退按钮

@Override
    public void onBackPressed() {
        if (getFragmentManager().getBackStackEntryCount() > 0) {
            getFragmentManager().popBackStack();
        } else {
            super.onBackPressed();
        }
    }
Run Code Online (Sandbox Code Playgroud)

我的onCreate方法

 @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.home_view);
            Toolbar _toolbar = (Toolbar) findViewById(R.id.toolbar);

           setSupportActionBar(_toolbar);
           getSupportActionBar().setHomeButtonEnabled(true);
           getSupportActionBar().setDisplayHomeAsUpEnabled(true);
           _frag_title = (TextView) _toolbar.findViewById(R.id.frag_title);
    }
Run Code Online (Sandbox Code Playgroud)

事实上它工作得很好,但我的问题是显示片段显示旧标题不显示新标题

有办法打电话给我的方法 _frag_title.setText(nav_items[position]);

我的问题不在后面导航,我的问题如何在导航中更新工具栏标题

Dha*_*mar 6

每当更改片段时,您需要更改工具栏的标题.

  1. 必须使用带有TAG名称或ID的片段,我将向您展示如何使用TAG名称(在这种情况下您也可以使用id,您必须更改我的代码).

要使用TAG,你必须添加片段TAG,每当你在布局中添加片段时,让我们通过TAG添加片段

Fragment fragmentA = new FragmentA();
getFragmentManager().beginTransaction()
    .replace(R.id.MainFrameLayout,fragmentA,"YOUR_TARGET_FRAGMENT_TAG")
    .addToBackStack("YOUR_SOURCE_FRAGMENT_TAG").commit(); 
Run Code Online (Sandbox Code Playgroud)

在上面的方法之后,在onBackPressed上检查你的片段,使用下面的代码

@Override
public void onBackPressed(){
    FragmentManager fm = getFragmentManager();
    if (fm.getBackStackEntryCount() > 0) {
        Log.i("MainActivity", "popping backstack");
        fm.popBackStack();
        Fragment fragment = getFragmentManager().findFragmentByTag("YOUR_TARGET_FRAGMENT_TAG");
        if (fragment instanceof FragmentA) {
            // add your code to change title of toolbar
        }
    } else {
        Log.i("MainActivity", "nothing on backstack, calling super");
        super.onBackPressed();  
    }
}
Run Code Online (Sandbox Code Playgroud)