简体   繁体   English

Android片段工具栏文本没有改变

[英]Android fragment toolbar text not changing

I am developing an app with Fragment .我正在开发一个带有Fragment的应用程序。 When I open the Fragment where not listed in navigation drawer.当我打开导航抽屉中未列出的Fragment For example, I have 8 fragments where 7 fragments is listed in navigation drawer and the other one is not listed ( Fragment name is sub category Fragment ) in navigation drawer.例如,我有 8 个片段,其中 7 个片段在导航抽屉中列出,而另一个未在导航抽屉中列出( Fragment名称是子类别Fragment )。 I can change toolbar title of 7 Fragment using below code.我可以使用以下代码更改 7 Fragment工具栏标题。 But I cannot change the toolbar tittle of Fragment where not listed in navigation drawer.但是我无法更改导航抽屉中未列出的Fragment的工具栏标题。

My HomeActivity.java我的HomeActivity.java

public class HomeActivity extends AppCompatActivity implements FragmentDrawer.FragmentDrawerListener {
    private Toolbar mToolbar;
    private FragmentDrawer drawerFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        mToolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(mToolbar);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        drawerFragment = (FragmentDrawer)
                getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer);
        drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), mToolbar);
        drawerFragment.setDrawerListener(this);

        displayView(0);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public void onDrawerItemSelected(View view, int position) {
        displayView(position);
    }

    public void displayView(int position) {
        Fragment fragment = null;
        String title = getString(R.string.app_name);
        switch (position) {
            case 0:
                fragment = new HomeFragment();
                title = getString(R.string.title_home);
                Log.d("LOGTAG", "Home");
                break;
            case 1:
                fragment = new CategoriesFragment();
                title = getString(R.string.title_categories);
                Log.d("LOGTAG", "Categories");
                break;
            case 2:
                fragment = new MyOrdersFragment();
                title = getString(R.string.title_myorders);
                Log.d("LOGTAG", "My Orders");
                break;
            case 3:
                fragment = new WalletFragment();
                title = getString(R.string.title_wallet);
                Log.d("LOGTAG", "Wallet");
                break;
            case 4:
                fragment = new AccountSettingsFragment();
                title = getString(R.string.title_account_settings);
                Log.d("LOGTAG", "Account Settings");
                break;
            case 5:
                fragment = new AboutUsFragment();
                title = getString(R.string.title_aboutus);
                Log.d("LOGTAG", "About Us");
                break;
            case 6:
                fragment = new ContactUsFragment();
                title = getString(R.string.title_contactus);
                Log.d("LOGTAG", "Contact Us");
                break;
            case 7:
                fragment = new LogOutFragment();
                title = getString(R.string.title_logout);
                Log.d("LOGTAG", "Log out");
                break;
            case 8:
                fragment = new SubCategoryFragment();
                title = getString(R.string.title_sub_categories);
                Log.d("LOGTAG", "Sub Categories");
                break;
            default:
                break;
        }

        if (fragment != null) {
            FragmentManager fragmentManager = getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.replace(R.id.container_body, fragment);
            fragmentTransaction.commit();

            // set the toolbar title
            getSupportActionBar().setTitle(title);
        }
    }

    public void loadFragment(int id, Fragment fragment) {
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.replace(id, fragment, fragment.toString());
        ft.addToBackStack(null);
        ft.commit();
    }
}

And the SubCategoryFragment.javaSubCategoryFragment.java

public class SubCategoryFragment extends android.support.v4.app.Fragment {
    List<GetDataAdapter> GetDataAdapter1;
    RecyclerView recyclerView;
    RecyclerView.LayoutManager recyclerViewlayoutManager;
    RecyclerView.Adapter recyclerViewadapter;

    String GET_JSON_DATA_HTTP_URL;
    String JSON_IMAGE_TITLE_NAME = "image_title";
    String JSON_IMAGE_URL = "image_url";
    String JSON_IMAGE_ID = "id";

    JsonArrayRequest jsonArrayRequest ;
    RequestQueue requestQueue ;

    public SubCategoryFragment() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_sub_category, container, false);

        HomeActivity activity = new HomeActivity();
        activity.displayView(8); //Occuring error

        // Inflate the layout for this fragment
        return rootView;
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
    }

    @Override
    public void onDetach() {
        super.onDetach();
    }
}

When I add activity.displayView(8) in sub category Fragment it shows error.当我在子类别Fragment添加activity.displayView(8) ,它显示错误。

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.content.res.Resources android.content.Context.getResources()”

So, how it possible to change Toolbar text?那么,如何更改Toolbar文本?

you can use this你可以用这个

((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("sub categories");

in place of代替

 HomeActivity activity = new HomeActivity();
        activity.displayView(8); //Occuring error

You can set title like this.您可以像这样设置标题。 In your subcategory fragment:在您的子类别片段中:

Toolbar mtoolbar;工具栏 mtoolbar;

In oncreate view(){在 oncreate 视图(){

mtoolbar=(Toolbar)getActivity.findViewById(R.id.toolbarid); mtoolbar=(Toolbar)getActivity.findViewById(R.id.toolbarid);

setSupportAcrionbar(mtoolbar): setSupportAcrionbar(mtoolbar):

} }

Then in onActivityCreated(){然后在 onActivityCreated(){

((HomeActvity) getSupportAcrionbar.settitle("your title")); ((HomeActvity) getSupportAcrionbar.settitle("你的标题"));

} }

在 Kotlin 中,您可以使用以下内容:

(activity as AppCompatActivity).supportActionBar?.title = "Title here"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM