【发布时间】:2015-10-15 22:18:18
【问题描述】:
我有 1 个 Activity,里面有 3 个 Fragment (Home-Login-RestorePass) 最初,HomeFragment 显示,另外两个被隐藏。我希望 ActionBar 标题根据显示的 Fragment 进行更改。
我正在尝试使用以下活动:
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 上显示一个箭头按钮(后退),那就太好了。
感谢您的宝贵时间!问候。
【问题讨论】:
-
您是否考虑过在您的
Fragments 上使用add()/remove()而不是show()/hide()?问题看起来可能是由于更改操作栏标题的调用发生冲突,因为即使隐藏的Fragments也是“活动的”,它们只是缺少 UI。此外,FragmentonResume()调用出现在您的Activity之后,并且在Fragments 中,您显然(通过您的代码)将标题设置为fragment_login...? -
@PPartisan 感谢您的时间,我尝试使用 add()/remove() 但它不起作用,其他 2 个片段位于主要片段之上,显然 remove() 不会从活动视图。我所有的片段都有其独特的 setActionBarTitle(fragmentString) 调用。我表达错了,对不起。再次感谢你:)
标签: android android-fragments android-actionbar