簡體   English   中英

ActionBar標題隨片段動態變化

[英]ActionBar Title dynamically change with fragment

我有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上出現一個箭頭按鈕(后退),取決於片段會很棒。

謝謝你的時間! 問候。

請記住,如果您使用的是支持庫,則必須在通過getActivity()獲取活動時專門投射活動。 然后,您需要確保使用getSupportActionBar()檢索支持ActionBar。 我可以通過在Fragment的onResume()使用以下代碼在我的應用程序中設置ActionBar標題...

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

在activity中使用此方法更改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);
    }
}

例如,您希望顯示Fragment Home

displayFragment(0);

如果在AndroidManifest設置活動屬性android:label="" ,您將能夠設置標題后初始化。 我通過工具欄源代碼發現了這個跟蹤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM