Android导航栏显示较低级别片段的指示符

Android导航栏显示较低级别片段的指示符,第1张

概述我有一些问题将导航抽屉功能切换到较低级别片段的功能.我已经阅读了 this thread来管理显示指标.但是当按下按钮时,它会打开导航栏,而不是返回到前一个片段.而且我无法将EditUserFragment中的 *** 作栏标题设置为“编辑个人资料”. 我正在使用Android Studio中提供的导航栏模板. 我有三个层次: > MainActivity与导航抽屉,由Home和Profile项目组成 > 我有一些问题将导航抽屉功能切换到较低级别片段的功能.我已经阅读了 this thread来管理显示指标.但是当按下按钮时,它会打开导航栏,而不是返回到前一个片段.而且我无法将EditUserFragment中的 *** 作栏标题设置为“编辑个人资料”.
我正在使用AndroID Studio中提供的导航栏模板.

我有三个层次:

> MainActivity与导航抽屉,由Home和Profile项目组成
> UserFragment标题为“配置文件”,该选项可以显示EditUserFragment
> EditUserFragment(下级片段)由UserFragment触发

主要活动

@OverrIDeprotected voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentVIEw(R.layout.activity_main);    drawerLayout = (DrawerLayout) findVIEwByID(R.ID.drawer_layout);    drawerToggle = new ActionbarDrawerToggle(this,drawerLayout,R.drawable.ic_launcher,R.string.navigation_drawer_open,R.string.navigation_drawer_close);}@OverrIDepublic voID onBackpressed() {    super.onBackpressed();    // this won't change the drawer indicator back    drawerToggle.setDrawerIndicatorEnabled(true);    // this works    drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);}public voID onSectionAttached(int number) {    // Show the corresponding Title on the action bar when clicked and open corresponding    // fragments.    Fragment fragment = null;    switch (number) {        case 1:            mTitle = getString(R.string.Title_home);            break;        case 2:            mTitle = getString(R.string.Title_profile);            fragment = new UserFragment();            break;    }    if (fragment != null) {        FragmentManager fragmentManager = getFragmentManager();        fragmentManager.beginTransaction().replace(R.ID.container,fragment).commit();    }}@OverrIDepublic boolean onCreateOptionsMenu(Menu menu) {    if (!mNavigationDrawerFragment.isDraweropen()) {        // Only show items in the action bar relevant to this screen        // if the drawer is not showing. Otherwise,let the drawer        // decIDe what to show in the action bar.        getMenuInflater().inflate(R.menu.main,menu);        restoreActionbar();        return true;    }    return super.onCreateOptionsMenu(menu);}public voID restoreActionbar() {    Actionbar actionbar = getActionbar();    actionbar.setNavigationMode(Actionbar.NAVIGATION_MODE_STANDARD);    actionbar.setTitle(mTitle);}public voID setActionbarTitle(String Title){    getActionbar().setTitle(Title);    Log.d("Title 2",getActionbar().getTitle().toString());}

当我按下手机按钮( *** 作栏上没有按钮)时,onBackpressed正在部分工作(在代码中注释).

UserFragment

@OverrIDepublic VIEw onCreateVIEw(LayoutInflater inflater,VIEwGroup container,Bundle savedInstanceState) {    setHasOptionsMenu(true);    // Inflate the layout for this fragment    VIEw vIEw = inflater.inflate(R.layout.fragment_profile,container,false);    drawerLayout = (DrawerLayout) getActivity().findVIEwByID(R.ID.drawer_layout);    drawerToggle = new ActionbarDrawerToggle(getActivity(),R.string.navigation_drawer_close);    return vIEw;}@OverrIDepublic boolean onoptionsItemSelected(MenuItem item) {    int ID = item.getItemID();    switch (ID) {        case R.ID.action_edit:            drawerToggle.setDrawerIndicatorEnabled(false);            // disable slIDing from edge to open drawer            drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);            getFragmentManager().beginTransaction()                    .replace(R.ID.container,new EditUserFragment())                    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)                    .addToBackStack(null)                    .commit();            return true;        default:            return super.onoptionsItemSelected(item);    }}

EditUserFragment

@OverrIDepublic voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setHasOptionsMenu(true);    getActivity().getActionbar().setdisplayHomeAsUpEnabled(true);    ((MainActivity) getActivity()).setActionbarTitle("Edit Profile");    Log.d("Title",getActivity().getActionbar().getTitle().toString());}@OverrIDepublic boolean onoptionsItemSelected(MenuItem item) {    // Get item selected and deal with it    Log.d("KEY: ",String.valueOf(item.getItemID()));    switch (item.getItemID()) {        case androID.R.ID.home:            Log.d("EditUserFragment","I'm here");            getActivity().onBackpressed();            return true;        default:            return super.onoptionsItemSelected(item);    }}

.getActivity()getActionbar()setdisplayHomeAsUpEnabled(真).按照预期的方式工作,而不是抽屉;虽然点击它,它开放抽屉,而不是回到以前的片段.另外,case androID.R.ID.home中的代码从不执行.
并且我尝试从“配置文件”将 *** 作栏标题设置为“编辑配置文件”.日志显示我“编辑个人资料”,但由于某些原因,实际运行的应用程序会显示“配置文件”.

我想要实现的是可以通过点击up指示器从EditUserFragment返回到UserFragment(现在up指示器打开导航栏).并在EditUserFragment中显示正确的标题.

任何帮助是极大的赞赏!!

解决方法 经过几天的分析,我发现问题是我在创建时正在使用内置的导航抽屉活动.内置的将任务分成两部分. MainActivity和NavigationDrawerFragment.因此,我在MainActivity中的drawerToggle与NavigationDrawerFragment中的实际不一样.

主角,MainActivty调用NavigationDrawerFragment来设置导航栏所需的所有内容.我通过在MainActivity中实现导航抽屉来解决这个问题,所以我只有一个drawerToggle.虽然如果我在NavigationDrawerFragment中有所有的东西(导航栏的变量),而不是MainActivity,我仍然找不到办法让它工作.如果有人知道答案,请随意留言!

总结

以上是内存溢出为你收集整理的Android导航栏显示较低级别片段的指示符全部内容,希望文章能够帮你解决Android导航栏显示较低级别片段的指示符所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1133988.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存