【问题标题】:Update ListView or Activity?更新 ListView 或 Activity?
【发布时间】:2013-08-19 14:06:50
【问题描述】:

我在选项卡布局内的 Activity 内有一个 listView。如果我长按该项目,我可以选择重命名该项目。重命名项目后,在重新启动 Activity 之前无法看到更改。

我尝试通过简单地创建一个新意图并重新打开活动来解决问题,但由于该活动在 tablayout 内,它不起作用。我还尝试重新打开 tabLayout 活动,但它会自动转到选项卡 1,而我正在尝试刷新选项卡 2 内的 listView。

然后我尝试通过创建 updateListView() 方法来解决它:

public void updateListView(){
    listAdapter.clear();
    listAdapter.addAll(recordedFilesArray);
    listAdapter.notifyDataSetChanged();
}

但这也不起作用。当我使用此方法时,它会完全清除 listView,然后我必须再次重新启动 Activity 才能看到结果。

那么,任何人都知道我可以做些什么来查看 listView 更改而不重新启动活动?顺便说一句,如果有帮助,我正在从文本文件中读取 ListView (ArrayList)。

【问题讨论】:

标签: java android eclipse android-intent android-listview


【解决方案1】:

尝试仅使用notifyDataSetChanged() 而不清除您的 listAdapter

【讨论】:

    【解决方案2】:

    您可以创建一个单独的适配器类并实现其 getView() 函数来管理它。您的活动会将数组列表传递给适配器。适配器的 getView() 将负责显示列表中的内容。

    当列表被修改时,您需要重新初始化适配器。这样 getView() 总是有更新的数据显示在屏幕上。

    【讨论】:

    • 非常感谢您的回答,但我是 Android 编程新手,所以这个解释让我很困惑。有没有机会给我一个带有 cmets 的小代码示例?
    【解决方案3】:

    要重命名项目,您可以更改 ArrayList 中的项目对象, 然后拨打adapter.notifyDataSetChanged()

    【讨论】:

    • 这正是我一直在尝试做的,但它不起作用
    【解决方案4】:

    我发现了问题。在活动重新启动之前,ArrayList 没有更改。我必须调用 arrayList.set() 来更改 ArrayList 中的元素。现在它可以正常工作了。

    我的代码:

    recordedFilesArray.set(toDelete, input.getText().toString()); //toDelete is arg2 variable (onLongItemClickListener)
    listAdapter.notifyDataSetChanged();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-08
      • 1970-01-01
      • 2017-01-07
      • 1970-01-01
      相关资源
      最近更新 更多