【问题标题】:Updating navigation drawer after back press后按后更新导航抽屉
【发布时间】:2015-03-18 09:27:59
【问题描述】:

我正在使用Navigation Drawer 实现Android 应用程序,但我遇到了问题。

我从 Android Studio 中的模板(带有导航抽屉的 Android 应用)开始,并在其中添加了一个新部分 - 设置。当点击设置按钮时,用户会被带到一个新的活动,用户可以通过按下操作栏中的“向上”按钮(效果很好)或按下物理后退按钮来返回。这部分效果不太好。

当按下“向上”按钮然后打开导航栏时,我的主页会突出显示(选中)。但是当使用返回按钮并打开抽屉式导航时,设置项被选中,就好像用户正在查看该页面而不是主页。

所以这是因为导航抽屉片段没有更新,我还没有找到解决这个问题的任何方法。我想要的是重新创建导航抽屉(这是我认为按下“向上”按钮时会发生的情况)。你知道我怎样才能做到这一点吗?

我开始研究基于此的解决方案:

getSupportFragmentManager().addOnBackStackChangedListener(
    new FragmentManager.OnBackStackChangedListener() {
        public void onBackStackChanged() {
            // Update your UI here.
        }
    });

但我不知道该写什么来更新整个 UI。 (尝试调用 onCreate() 但它太丑了,不可能是正确的方法)。

有什么建议吗?

更新:

从另一个活动按 BACK 时不会发送 onBackStackChanged 事件。仅适用于当前活动中的片段。

【问题讨论】:

    标签: android android-fragments navigation-drawer fragment-backstack


    【解决方案1】:

    您必须像这样覆盖操作栏后退按钮:

        @Override
            public boolean onOptionsItemSelected(MenuItem item) {
                // TODO Auto-generated method stub
                switch (item.getItemId()) {
                case android.R.id.home:
        this.finish();
    
    //or
    
    super.onBackPressed();
    
                    break;
    
                }
                return true;
    
            }
    

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题。我在 ListView 适配器中使用了 notifyDataSetChanged()。

      在我使用的 getView() 中,

      if(mListView.isItemChecked(position)) {
                  convertView.setBackgroundColor(getResources().getColor(R.color.md_black_1000_12));
              }else{
                  convertView.setBackgroundColor(getResources().getColor(android.R.color.transparent));
              }
              notifyDataSetChanged();
      

      【讨论】:

        猜你喜欢
        • 2015-03-05
        • 2015-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多