【问题标题】:Ways to refresh a ListView刷新 ListView 的方法
【发布时间】:2012-11-19 21:35:38
【问题描述】:

我有一个带有 ListView 的 Android 应用。每一行都是由 SQLIte 查询结果动态生成的。当用户点击一个项目时,应用程序应该用该项目的“内容”刷新列表,由另一个 SQLite 查询生成,依此类推。 我试图“刷新”创建新意图并将其发送到同一活动的活动。活动名称为 ShopActivity

ListView list_content = ((ListView)findViewById(R.id.listforshop));
list_content.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {              

            // ID and text of selected item
            long selected_id = id;
            String selected_name = (String) ((TextView) view.findViewById(R.id.element)).getText();

            // New intent
            Intent intent = getIntent();
            intent.setClassName(ShopActivity.this, ShopActivity.class.getName());

            // Passing data and refreshing activity
            intent.putExtra("id", selected_id);
            intent.putExtra("name", selected_name);
            intent.putExtra("type", "");
            startActivity(intent);
        }       
});

通过这种方式,LogCat 向我显示了很多关于 Bundle 的警告。该应用似乎无法启动活动。

还有另一种“刷新” ListView 的方法吗?这个实现是否正确?

【问题讨论】:

  • 当列表的数据需要更新时,您应该尝试在适配器上调用 notifyDataSetChanged() 并可能在 ListView 上调用 invalidate() 以请求视图重绘自身

标签: android listview android-intent android-activity refresh


【解决方案1】:
// New intent
Intent intent = getIntent();
intent.setClassName(ShopActivity.this, ShopActivity.class.getName());

这并没有创建一个新的 Intent,而是重用了现有的 Intent……当你恢复这个 Activity 时,像这样重用一个 Intent 会引发很多警告和异常。为了创建一个新的 Intent,你需要使用关键字new

但您实际上并不需要重新加载整个 Activity,只需获取一个新的 Cursor 并使用 CursorAdapter#swapCursor() 刷新您的 ListView。

【讨论】:

    【解决方案2】:

    当尝试刷新您的ListView 时,您应该考虑使用适配器的notifyDataSetChanged()。这个方法告诉你的适配器提供的数据已经改变,它应该更新列表视图。

    所以你应该将新数据添加到你的适配器,然后调用这个方法。

    【讨论】:

      【解决方案3】:

      听起来您正在查看详细信息,请不要使用相同的活动来查看它们。添加一个新的ShopDetailActivity 并在点击时将用户定向到那里,这样用户可以按返回键转到原始列表(加上漂亮的过渡动画)。

      【讨论】:

      • 是的,最后我决定按照这条路走:)
      【解决方案4】:

      另一种处理列表和详细信息的方法是使用片段。这样做的好处是在大屏设备上,可以同时看到列表和详情。

      使用一个 Activity 来显示列表和详细信息很麻烦。至少,使用两个活动。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-10
        • 1970-01-01
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        • 2012-06-18
        • 1970-01-01
        相关资源
        最近更新 更多