导航抽屉列表视图不刷新列表项

2023-12-01

我正在创建一个应用程序,并且我正在使用NavigationDrawer and Fragments在我的申请中,现在的问题是我有五个ListItems in NavigationDrawer像这样。

-Home
-编辑个人资料
-我的订单
-登出
-Help

现在,当用户单击注销时,所有列表项都应该隐藏,只有登录应该可见。

以下是我的代码片段

  public class MainActivity extends FragmentActivity {
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;
private String abc;
private Intent ii;
// nav drawer title
private CharSequence mDrawerTitle;
// used to store app title
private CharSequence mTitle;
// slide menu items
private String[] navMenuTitles;
private TypedArray navMenuIcons;
private ArrayList<NavDrawerItem> navDrawerItems;
private NavDrawerListAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ii=getIntent();


    mTitle = mDrawerTitle = getTitle();

    // load slide menu items
    navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);

    // nav drawer icons from resources
    navMenuIcons = getResources()
            .obtainTypedArray(R.array.nav_drawer_icons);

    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerList = (ListView) findViewById(R.id.list_slidermenu);



    navDrawerItems = new ArrayList<NavDrawerItem>();



    navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1)));
    // Find People
    navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1)));
    // Photos
    navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, -1)));
    // Communities, Will add a counter here
    navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons.getResourceId(3, -1)));
    // Pages
    navDrawerItems.add(new NavDrawerItem(navMenuTitles[4], navMenuIcons.getResourceId(4, -1)));
    // What's hot, We  will add a counter here
    //navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1)));


    // Recycle the typed array
    //navMenuIcons.recycle();

    mDrawerList.setOnItemClickListener(new SlideMenuClickListener());

    // setting the nav drawer list adapter
    adapter = new NavDrawerListAdapter(getApplicationContext(),
            navDrawerItems);
    mDrawerList.setAdapter(adapter);

    // enabling action bar app icon and behaving it as toggle button
    getActionBar().setDisplayHomeAsUpEnabled(true);
    getActionBar().setHomeButtonEnabled(true);

    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
            R.drawable.ic_drawer, //nav menu toggle icon
            R.string.app_name, // nav drawer open - description for accessibility
            R.string.app_name // nav drawer close - description for accessibility
    ) {
        public void onDrawerClosed(View view) {
            getActionBar().setTitle(mTitle);
            // calling onPrepareOptionsMenu() to show action bar icons
            invalidateOptionsMenu();
        }

        public void onDrawerOpened(View drawerView) {
            getActionBar().setTitle(mDrawerTitle);
            // calling onPrepareOptionsMenu() to hide action bar icons
            invalidateOptionsMenu();
        }
    };
    mDrawerLayout.setDrawerListener(mDrawerToggle);

    if (savedInstanceState == null) {
        // on first time display view for first nav item
        displayView(0);
    }
}

/**
 * Slide menu item click listener
 * */
private class SlideMenuClickListener implements
        ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {
        // display view for selected nav drawer item
        displayView(position);

        if(position == 4) { // position of Sign out button

            navDrawerItems.clear(); // empty the adapter array

            navMenuIcons.recycle();

            navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1)));
            navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1)));

            //navDrawerItems.add(new NavDrawerItem(navMenuTitles[signoutIndex], navMenuIcons.getResourceId(signoutIndex, -1));
            adapter.notifyDataSetChanged();


        }
        else
        {
            if(ii.hasExtra("login"))
            {
                abc=ii.getStringExtra("login");

                if(abc.equals("login"))
                {
                    navDrawerItems.clear();
                    navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1)));
                    // Find People
                    navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1)));
                    // Photos
                    navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, -1)));
                    // Communities, Will add a counter here
                    navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons.getResourceId(3, -1)));
                    // Pages
                    navDrawerItems.add(new NavDrawerItem(navMenuTitles[4], navMenuIcons.getResourceId(4, -1)));
                    adapter.notifyDataSetChanged();
                    Toast.makeText(MainActivity.this,"success"+abc,Toast.LENGTH_LONG).show();
                }
                else
                {
                    Toast.makeText(MainActivity.this,"unsuccess"+abc,Toast.LENGTH_LONG).show();
                }
            }

        }
    }
}

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

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // toggle nav drawer on selecting action bar app icon/title
    if (mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    }
    // Handle action bar actions click
    switch (item.getItemId()) {
    case R.id.action_settings:
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

/* *
 * Called when invalidateOptionsMenu() is triggered
 */
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    // if nav drawer is opened, hide the action items
    boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
    menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
    return super.onPrepareOptionsMenu(menu);
}

/**
 * Diplaying fragment view for selected nav drawer list item
 * */
private void displayView(int position) {
    // update the main content by replacing fragments
    Fragment fragment = null;
    switch (position) {
    case 0:
        fragment = new HomeFragment();
        break;
    case 1:


        fragment = new FindPeopleFragment();
        break;
    case 2:
        fragment = new PhotosFragment();
        break;
    case 3:
        fragment = new CommunityFragment();
        break;
    case 4:


        fragment = new LoginActivity();
        break;
    case 5:

            fragment = new LoginActivity();

        break;

    default:
        break;
    }

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

        // update selected item and title, then close the drawer
        mDrawerList.setItemChecked(position, true);
        mDrawerList.setSelection(position);
        setTitle(navMenuTitles[position]);
        mDrawerLayout.closeDrawer(mDrawerList);
    } else {
        // error in creating fragment
        Log.e("MainActivity", "Error in creating fragment");
    }
}

@Override
public void setTitle(CharSequence title) {
    mTitle = title;
    getActionBar().setTitle(mTitle);
}



@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    mDrawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    // Pass any configuration change to the drawer toggls
    mDrawerToggle.onConfigurationChanged(newConfig);
}

} 登录活动.java

    public class LoginActivity extends Fragment{

public LoginActivity(){}

private Button alreadymember;

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

    alreadymember=(Button)rootView.findViewById(R.id.btn_login_alredymember);

    alreadymember.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            HomeFragment tf = new HomeFragment();
            android.support.v4.app.FragmentManager fm = getFragmentManager();
            android.support.v4.app.FragmentTransaction ft = fm.beginTransaction();
            ft.replace(R.id.frame_container, tf);
            ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
            ft.addToBackStack(null);
            ft.commit();
        }
    });
    return rootView;
}
}

您不应该试图隐藏抽屉里的物品。我只会更新适配器,删除不需要的项目,然后使其无效。

当用户点击Signout,我会做这样的事情:

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    // display view for selected nav drawer item
    displayView(position);

    // if using fixed positions
    if(position == 6) { // position of Sign out button

        navDrawerItems.clear(); // empty the adapter array
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[signoutIndex], navMenuIcons.getResourceId(signoutIndex, -1));
        adapter.notifyDataSetChanged();

    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

导航抽屉列表视图不刷新列表项 的相关文章

  • 单击弹出菜单时为什么导航栏出现在全屏应用程序中

    我有一个全屏应用程序 MainActivity java public class MainActivity extends AppCompatActivity TargetApi Build VERSION CODES KITKAT pr
  • Android Studio 3.0.0 不允许 DOCTYPE

    升级到Android Studio 3 0 0 同步并更新gradle插件 出现以下错误 Error DOCTYPE not allowed if function http apache org xml features disallow
  • Android 上有哪些字体可用? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我知道安卓有一个字体集合 http www ascenderfonts com store search
  • 对话框上的 EditText 不返回任何文本

    我太累了 找不到错误 我没有发现任何错误 但我没有从 editText 收到任何文本 请看下面的代码 活动密码 xml
  • Firebase 数据库快速入门处理计数的方式安全吗?

    我想为文章点赞创建一个增量字段 我指的是这个链接 https firebase google com docs database android save data save data as transactions https fireb
  • Android 自定义视图不能以正确的方式处理透明度/alpha

    我正在绘制自定义视图 在此视图中 我使用两个不同的绘画和路径对象在画布上绘画 我基本上是在绘制两个重叠的形状 添加 Alpha 后 视图中重叠的部分比图像的其余部分更暗 这是不希望的 但我不知道如何解决它 这是我的代码片段 用于展示我如何在
  • Retrofit-2 内容类型问题

    我的 Api 接受 Content Type application json 作为标头 我按照改造文档中所述完美设置了标题 Headers Content Type application json POST user classes C
  • 使用 RecyclerView 适配器在运行时更改布局屏幕

    我有两个布局文件 如下所示 如果列表中存在数据 则我显示此布局 当列表为空时 我会显示此布局 现在我想在运行时更改布局 当用户从列表中删除最后一项时 我想将布局更改为第二张图片中显示的 空购物车布局 In getItemCount Recy
  • Youtube 退出全屏模式 TextView 可见性问题

    我正在全屏模式下播放视频 当我单击后退按钮时 我可以退出全屏模式 但无法显示我在全屏情况下隐藏的 TextView 要在全屏模式下隐藏 textView 我使用以下代码 Override public void onInitializati
  • 以编程方式更新 Android 中的联系人姓名和电话号码

    我创建一个应用程序来读取 更新 删除联系人详细信息 这是更新联系人姓名和电话号码的问题 有人可以帮助我吗 我该怎么做 我正在使用以下代码 但它不起作用 Override public View onCreateView LayoutInfl
  • Android Studio更新到1.5后Gradle错误

    今天我已将 Android Studio 更新到 v1 5 我的 libgdx 项目在这次更新之前运行良好 现在我收到此错误消息 Error Unable to load class org gradle mvn3 org sonatype
  • 如何持续更新MPAndroidChart中的Y轴值

    我希望 LineChart 中的轴能够实时调整其最大值和最小值 当新数据的 Y 值增加 正值和负值 时 像 ResetAxisMaxValue 和 ResetAxisMinValue 这样的函数可以很好地工作 但是 一旦信号再次变低 Y 值
  • 以编程方式将 TextView 添加到主屏幕小部件

    我想以编程方式将文本视图控件添加到我的主屏幕小部件 在下面的示例中 我使用 TextView 填充 Linearlayout 但是这里应该如何使用 RemoteView 它只接受 xml 资源布局作为参数 public class MyWi
  • java.lang.IllegalArgumentException:找不到片段的 id 0x1020002 (android:id/content) 的视图

    我正在尝试从一个片段移动到另一个片段 它在片段事务期间显示以下错误 java lang IllegalArgumentException No view found for id 0x1020002 android id content f
  • Vimeo 视频在 Android 6 设备上停止播放

    我正在尝试在我的应用程序中播放 Vimeo 的视频 问题是在 Android 6 设备上 视频会在一定时间后停止播放 在 API 较低的设备上一切正常 时间取决于质量 对于下面提供的网址的视频 播放一定分钟 1 到 3 视频质量有多低 播放
  • Espresso 和 Proguard 的 Java.lang.NoClassDefFoundError

    我对 Espresso 不太有经验 但我终于成功地运行了它 我有一个应用程序需要通过 Proguard 缩小才能处于 56K 方法之下 该应用程序以 3 秒的动画开始 因此我需要等到该动画结束才能继续 这就是我尝试用该方法做的事情waitF
  • 无法将类型“System.IO.Stream”隐式转换为“Java.IO.InputStream”

    我提到了一些类似的问题 但没有一个涉及IO 当我使用时 我在java中使用了相同的代码Eclipse 那次就成功了 但现在我尝试在中使用这段代码Mono for Android C 它不起作用 我正在尝试运行此代码来创建一个InputStr
  • FCM onMessageReceived 应用程序运行时返回空白消息和标题

    正如您在标题中所写 当应用程序关闭时 它运行良好 并且onMessageReceived获取消息正文和标题 但如果应用程序处于前台模式 运行模式 则可以发送通知 但没有消息和标题 请问该怎么办 代码 Override public void
  • 安卓的限制

    我需要构建一个应用程序 该应用程序拍摄相机图像并将其上传到网络 在网络上进行一些处理并返回真 假 我在这方面遇到了一些问题 希望得到澄清 1 我的应用程序有什么方法可以知道 Android 相机捕获的图像吗 我从这里明白了什么 Androi
  • Android ScrollView fillViewport 不工作

    我有一个简单的布局 名称位于顶部 按钮位于屏幕底部 或者超出该按钮 以防我添加更多项目 所以我使用带有 LinearLayout 的 ScrollView 如下所示

随机推荐

  • 如何将 CF_DIBV5 从剪贴板 (Format17) 转换为透明位图?

    GDI 不支持CF DIBV5格式但是当多个应用程序将透明图像放入它们使用的剪贴板时CF DIBV5 格式 17 保持 Alpha 通道的格式 NET Framework 无法处理CF DIBV5格式 以便 NET 应用程序无法将 Alph
  • 等待订阅完成

    我有一个简单的场景 我想将从服务返回的数组存储到类变量中 在存储数据之前如何等待数据可用 如果我等待一定时间 使用 settimeout 进行测试 它就可用 Service public getEventHistory Observable
  • URL会话错误

    我正在使用一个实际上是为 swift 2 编写的函数 我已经对 swift 3 进行了审核 但我不断收到错误 URLSession 生成 不是预期的上下文结果类型 URL会话 我的代码如下所示 func downloadItems let
  • 获取新票然后重试第一个请求

    Update 我扩展 Http 类 当我deleteDocument 我想要处理错误getTicket 然后重试ma请求deleteDocument 与新的this TICKET Injectable export class HttpSe
  • 如何从非 OSGi 应用程序调用 OSGi 应用程序,反之亦然

    我正在考虑使用 OSGi 编写一组新的应用程序 但它们需要与现有的非 OSGi 应用程序进行大量交互 需要澄清的是 新的应用程序将需要调用其他团队维护的现有非 OSGi 代码库 通常是不同协议的专有服务 而新的非 OSGi 应用程序将需要调
  • 设置在python中调用bash脚本的环境变量[重复]

    这个问题在这里已经有答案了 我有一个 bash 脚本 如下所示 python myPythonScript py python myOtherScript py VarFromFirstScript and myPythonScript p
  • 如何在 C# 控制台应用程序中绘制方框、矩形

    我问2个相关问题 1 我们如何将输出 例如结果和消息 放入 C 控制台应用程序的框中 2 我们如何在 C 控制台应用程序中绘制矩形 感谢您提供任何示例教程或建议 假设你只是指一个字符框 这就可以了 private static void D
  • Laravel 附近的商店

    我尝试在 Laravel 5 1 中获取 neraby 商店 我有计算坐标的地理编码解析器 但我对半正矢公式有疑问 基本上我需要从表 Aziende 商店 给定经纬度 e 类别传递的槽 url 获取附近的商店 我尝试使用这段代码 dove
  • 将图像保存到硬盘而不提示?

    我用推特 有些人的推文包含照片 我想保存它们 我检查了 ifttt 其中 twitter 不是触发器 因此 ifttt 无法帮助我做到这一点 一种想法可能是使用 JavaScript 我使用 Firefox 并安装了 Greasemonke
  • d3 v4 分层边缘捆绑

    我正在尝试将我的分层边缘捆绑图表移动到 d3v4 但找不到 d3 layout bundle 的替代方案 d3v3 的例子是https bl ocks org mbostock 7607999 有 d3v4 的例子吗 请帮忙 您需要两件事
  • Monad 还可以测量副作用

    如何计算在 Monad 上应用绑定的次数 给定状态 monad 的示例 我想计算状态更改的次数 我怎样才能最好地概括这一点 这个逻辑应该是绑定运算符的一部分 由于它增加计数而具有副作用 还是有更好的方法吗 你不能 单子定律之一是 retur
  • 帮助理解 C# 代码并移植到 Objective-C

    好的 我有这个原型 是其他人用 C 编写的 我正在尝试将其放入 Objective C 中 现在 我还没有任何正式的 C 经验 所以我还不了解它的一切 我理解前三个变量是什么 但是我遇到了第四行和第五行 c data 正在做的事情的问题 第
  • 如何在 Perl 中用递增的数字替换标记?

    我想用数字替换文本文件中的标记 令牌是
  • 删除所有数据后如何重置SQL Server中的自动增量

    我在 sql 中有一个函数可以生成连续的字母数字系列 no like c000 c0001 效果很好 但是当我删除表中的所有数据时 它从最后生成的编号开始 我希望它从 c0000 重置其值 代码如下 create table Custome
  • MS Access 取消执行直通查询键盘快捷键

    在 MS Access 中使用 SQL 直通查询时 默认超时为 60 秒 此时将向远程服务器发送一条指令以取消请求 是否有类似 Access 自己的 Ctrl Break 操作那样从键盘发送此命令的方法 首先 了解 Control C 如何
  • 适用于所有机场地点的 Skyscanner API 和使用 CURL 的 Travel API

    我正在尝试从 skyscanner api 获取地理目录数据 我已阅读文档http business skyscanner net portal en GB Documentation ApiOverview 我已经创建了 api 密钥 我
  • C# 让程序等待浏览器完成加载网页

    我如何让我的程序等到网页完成加载后再执行下一条语句 我尝试过 Process WaitForInputIdle 但它不会等待 ProcessStartInfo pInfo new ProcessStartInfo firefox exe p
  • 限制全局目录/文件夹列表的结果数量

    在下面的代码中 我将如何将目录结果 pdf 的数量限制为 8 个 counter 0 foreach glob directory pdf as path configure path docs filectime path path kr
  • “在课堂上找不到字段的设置器/字段”

    我正在 Android Studio 中创建一个应用程序 该应用程序连接到 Cloud Firestore 数据库 在数据库中我有以下结构 Myclass name test subclass 0 String 1 1 String 2 类
  • 导航抽屉列表视图不刷新列表项

    我正在创建一个应用程序 并且我正在使用NavigationDrawer and Fragments在我的申请中 现在的问题是我有五个ListItems in NavigationDrawer像这样 Home 编辑个人资料 我的订单 登出 H