![](/img/trans.png)
[英]Manage toolbar's navigation and back button from fragment to fragment in android
[英]Android - update toolbar title in activity while handle back navigation with fragment
我有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);
}
這個方法處理后退按鈕
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 0) {
getFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}
我的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);
}
事實上它工作得很好,但我的問題是顯示片段顯示舊標題不顯示新標題
有沒有辦法調用我的方法_frag_title.setText(nav_items[position]);
我的問題不在后面導航,我的問題如何在導航中更新工具欄標題
每當改變你需要做的片段時,改變工具欄的標題。
要使用TAG,你必須添加片段TAG,每當你在布局中添加片段時, 讓我們通過TAG添加片段
Fragment fragmentA = new FragmentA();
getFragmentManager().beginTransaction()
.replace(R.id.MainFrameLayout,fragmentA,"YOUR_TARGET_FRAGMENT_TAG")
.addToBackStack("YOUR_SOURCE_FRAGMENT_TAG").commit();
在上面的方法之后,在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();
}
}
解決此問題后,這是我的一段代碼
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) {
// I add tag when I add fragment to BackStack
String backStackName = fragment.getClass().getName();
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.view_content, fragment, "TARGET_TAG")
.setTransitionStyle(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
.addToBackStack(backStackName)
.commit();
_frag_title.setText(nav_items[position]);
mDrawerLayout.closeDrawer(GravityCompat.START);
}
}
我在onCreate
方法上添加了BackStackChangedListener
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.home_view);
......
....
.
getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
Fragment f = getSupportFragmentManager().findFragmentById(R.id.view_content);
if (f != null) {
updateTitleAndDrawer(f);
}
}
});
}
private void updateTitleAndDrawer(Fragment f) {
String name = f.getClass().getName();
if (name != null) {
ChangeTitle(name);
}
}
private void ChangeTitle(String fragmentName) {
if (fragmentName.equals(Test_Home.class.getName())) {
_frag_title.setText(nav_items[0]);
} else if (fragmentName.equals(Diseases_Fragment.class.getName())) {
_frag_title.setText(nav_items[1]);
} else if (fragmentName.equals(Questions_Fragment.class.getName())) {
_frag_title.setText(nav_items[2]);
..........
.......
}
}
你需要在片段的每個片段的恢復時處理這個,以便在片段返回時指定標題。
目前發生的情況是,你在onCreate
或實際創建fragment
某個地方設置標題,但由於tool bar
不是駐留在Activity
內的東西(不在Fragment
)你必須對其進行具體的更改。 最好的地方是onResume
方法的片段。
因此,嘗試在Fragment
onResume
中設置TextView
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.