我有 1 个 Activity,里面有 3 个 Fragments (Home-Login-RestorePass) 最初,HomeFragment 显示,另外两个隐藏。我希望 ActionBar 标题根据显示的 fragment 而改变。
我在我的 Activity 中尝试:
public void setActionBarTitle(String title){
getSupportActionBar().setTitle(title);
}
@Override
public void onResume() {
super.onResume();
// Set title
setActionBarTitle(getString(R.string.app_name));
}
和 fragment 有相同的:
@Override
public void onResume() {
super.onResume();
// Set title
((LoginActivity) getActivity()).setActionBarTitle(getString(R.string.fragment_login));
}
但它不起作用。它总是在标题上显示 R.string.fragment_login。
我正在使用 FragmentTransaction 进行 fragment 转换:
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();
}
});
此外,如果我可以根据 fragment 在 ActionBar 上显示一个箭头按钮(返回),那就太好了。
感谢您的宝贵时间!问候。
最佳答案
请记住,如果您使用的是支持库,则必须在通过 getActivity()
获取 Activity 时专门对其进行转换。然后您需要确保使用 getSupportActionBar()
检索支持 ActionBar。我能够在我的 fragment 的 onResume()
...
@Override
public void onResume() {
super.onResume();
AppCompatActivity activity = (AppCompatActivity) getActivity();
ActionBar actionBar = activity.getSupportActionBar();
actionBar.setTitle(R.string.my_fragment_title);
}
关于android - ActionBar 标题随 fragment 动态变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33159471/