0

我有一个带有 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 的方法吗?这个实现正确吗?

4

4 回答 4

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

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

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

于 2012-11-19T21:42:31.293 回答
0

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

因此,您应该将新数据添加到您的适配器,然后调用此方法。

于 2012-11-19T21:44:45.110 回答
0

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

于 2012-11-19T21:47:52.683 回答
0

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

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

于 2012-11-19T23:13:51.867 回答