ActionBar标题随片段动态变化

时间:2015-10-15 22:18:19

标签: android android-fragments android-actionbar

我有1个活动,里面有3个碎片(Home-Login-RestorePass)最初,HomeFragment显示,其他两个隐藏。我希望ActionBar标题根据显示的片段而改变。

我在我的活动中尝试:

public void setActionBarTitle(String title){
    getSupportActionBar().setTitle(title);
}

@Override
public void onResume() {
    super.onResume();
    // Set title
    setActionBarTitle(getString(R.string.app_name));
}

并且片段具有相同的内容:

@Override
public void onResume() {
    super.onResume();
    // Set title
    ((LoginActivity) getActivity()).setActionBarTitle(getString(R.string.fragment_login));
}

但它不起作用。它总是在标题上显示 R.string.fragment_login

我使用FragmentTransaction进行片段转换:

btnLogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            FragmentTransaction ft = getFragmentManager().beginTransaction();
            ft.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
            HomeFragment homeFragment = (HomeFragment) getFragmentManager().findFragmentById(R.id.fragmentHome);
            LoginFragment loginFragment = (LoginFragment) getFragmentManager().findFragmentById(R.id.fragmentLogin);
            ft.hide(homeFragment).addToBackStack(null);
            ft.show(loginFragment).addToBackStack(null).commit();
        }
    });

此外,如果我可以在ActionBar上显示一个箭头按钮(背面),取决于片段会很棒。

感谢您的时间!问候。

3 个答案:

答案 0 :(得分:12)

请注意,如果您使用支持库,则必须在通过getActivity()时专门投射您的活动。然后,您将确保使用getSupportActionBar()检索支持ActionBar。我可以使用片段onResume()中的以下代码在我的应用中设置ActionBar标题...

@Override
public void onResume() {
    super.onResume();
    AppCompatActivity activity = (AppCompatActivity) getActivity();
    ActionBar actionBar = activity.getSupportActionBar();
    actionBar.setTitle(R.string.my_fragment_title);
}

答案 1 :(得分:11)

在活动中使用此方法更改Fragment并以编程方式设置标题:

private void displayFragment(int position) {
    // update the main content by replacing fragments
    Fragment fragment = null;
    String title = "";
    switch (position) {
    case 0:
        fragment = new Home();
        title = "Home";
        break;
    case 1:
        fragment = new Login();
        title = "Login";
        break;
    case 2:
        fragment = new RestorePass();
        title = "Restore Password";
        break;

    default:
        break;
    }

    // update selected fragment and title
    if (fragment != null) {
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.frame_container, fragment).commit();
        getSupportActionBar().setTitle(title);
        // change icon to arrow drawable
        getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_arrow);
    }
}

例如,您希望显示片段Home

displayFragment(0);

答案 2 :(得分:0)

如果您在android:label=""中设置了活动属性AndroidManifest,则可以设置标题后初始化。我通过工具栏源代码发现了这个跟踪。

相关问题