【问题标题】:Refreshing listview in tab activity from main activity从主要活动刷新选项卡活动中的列表视图
【发布时间】:2018-08-27 13:45:39
【问题描述】:

我有一个带有选项菜单的主要活动,其中包含一个可检查的项目。我还有三个带有活动的选项卡,每个选项卡都包含一个列表视图。

当我更改主活动中的可检查项目菜单选项时,我要做的是刷新所选选项卡的列表视图。

知道如何实现这一目标吗?

【问题讨论】:

  • 你有 2 个活动,一个有可检查列表,另一个有标签吗?
  • 我有一个带有 Tab 主机的主要活动 -> 选项卡小部件,然后是三个选项卡,每个选项卡都有一个活动和一个列表视图。

标签: android listview tabs menu-items


【解决方案1】:

通常当您有选项卡时,您使用的是视图分页器,因此每个片段都应该能够指定它自己的选项菜单,从而将范围保持在当前选定的列表中。

【讨论】:

    【解决方案2】:

    在具有列表视图的 Fragment 上的 onResume() 中调用适配器上的 notifyDataSetChanged()。

    【讨论】:

    • 问题是当我触摸放置在主活动中的菜单项时,选定的选项卡活动(显示给用户的那个)不会触发 onresume,所以活动不会了解变化。事实上,这就是问题所在。
    • 每个选项卡都有一个片段权限..并且列表视图在那个片段中..所以在片段的onResume()中调用notifyDataSetChanged(),而不是活动..
    • 但是当我触摸放置在主要活动中的项目时,Tab 的 onresume 不会触发。也许你可以告诉我一个方法。
    • 当然..你能粘贴你的代码吗..这样我可以看到并告诉你怎么做..
    【解决方案3】:

    您可以采取一种解决方法来做到这一点。使用全局类。您可以将选定的选中项值存储在全局类中。并从代码中的任何位置访问该值。 How to create a global class

    然后在fragments中使用TimerTask来检查选中的item是否改变并重新加载数据。

    这里是如何实现TimerTask 将 previousItem 和 currentItem 保留为字符串值以检查修改。

    TimerTask timerTask;
    Timer timer;
    timerTask = new TimerTask() {
            @Override
            public void run() {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        //check if the checkable item is modified
                        currentItem = globalClass.getCheckedItem();
                        if(!previousItem.equalsIgnoreCase(currentItem)){
                            previousItem = currentItem;
                            //load your data
                        }
                    }
                });
            }
        };
        timer = new Timer();
        timer.scheduleAtFixedRate(timerTask, 0, 200);
    

    globalClass.getCheckedItem(); 是用于从 globalClass 中获取选定项的方法。当您从选项菜单中选择一个项目时,您可以设置该值 并确保取消定时器onPause()

    @Override
    protected void onPause() {
        if(timer != null){
            timer.cancel();
        }
        super.onPause();
    }
    

    希望这对你有用。

    【讨论】:

    • 感谢您的回答!。我试试看。
    猜你喜欢
    • 1970-01-01
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    相关资源
    最近更新 更多