刷新ListView的方法

时间:2012-11-19 21:35:39

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

我有一个带有ListView的Android应用。每行都是由SQLIte查询结果以dinamically方式生成的。当用户单击某个项目时,该应用程序应使用该项目的“内容”刷新列表,由另一个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的警告。似乎app无法启动活动。

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

4 个答案:

答案 0 :(得分:1)

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

这不会产生新的Intent,这会重用现有的...重新使用这样的Intent会在你恢复这个Activity时引发很多警告和异常。要创建新的Intent,您需要使用关键字new

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

处理列表和细节的另一种方法是使用Fragments。这样做的好处是,在大屏幕设备上,列表和细节可以同时显示。

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