【问题标题】:How to delete previous List contents and add new contents?如何删除以前的列表内容并添加新内容?
【发布时间】:2013-03-09 07:14:45
【问题描述】:

我有一个包含 10 个图像和名称的列表。单击下一个按钮时,它会显示 10 张带有名称的图像,但也会显示前 10 张图像(总共 20 张图像)。

我只想显示当前的 10 张图像,并想从 ListView 中删除之前的 10 张图像。我怎样才能做到这一点?

我尝试了myArrayList.clear();arrayList.remove();adapter.clearListView();listView.removeAllView();,但我仍然得到 20 张图片(10 张现在的图片和 10 张以前的图片)。

请用示例代码提出一些解决方案。

我的代码是

public View getView(int position, View convertView, ViewGroup parent) {

    ViewHolder view;  
    LayoutInflater inflator = activity.getLayoutInflater();  

  if(convertView==null)  
   {  
       view = new ViewHolder();  
       convertView = inflator.inflate(R.layout.image_detail_view, null);
       view.txtViewTitle = (TextView) convertView.findViewById(R.id.textView1);  
       view.imgViewFlag = (ImageView) convertView.findViewById(R.id.imageView1); 
       convertView.setTag(view);  
    }  
  else  
    {  

      view = (ViewHolder) convertView.getTag();  
    }  

       listImage.clear();
       listText.clear();
       notifySetDataChange();
  return convertView;  
}

我正在另一个类中创建列表视图并在上面的代码中调用适配器..

我也尝试清除 listView..

图像和名称来自服务器,它们本质上是动态的..

【问题讨论】:

  • 如何在数组中添加图像?您是否有从中获取图像或其他内容的数据库?
  • 从服务器获取图片..
  • 您是否认为下次单击时从服务器获取的只有 10 张图像会存储在数组中?我只是想确认一下。
  • 我将在下一个按钮上一次从服务器获取 10 张图像..
  • 尝试在每次点击操作后重新创建您的列表和适配器。

标签: android android-layout android-intent android-widget


【解决方案1】:

您不能在 getView 方法中清除列表数据。您必须从 listAdapter 中清除。然后它将正常工作。

【讨论】:

  • 如果您没有收到,请提交您的list.setAdapter 代码。我会尽力帮助你的。
  • 我的代码是:myAdapter = new MylistAdapter(this,listText, listImage); myAdapter.notifyDataSetChanged(); // 设置自定义适配器为列表视图 listView = (ListView) findViewById(R.id.listV_main); listView.setAdapter(myAdapter); listView.setSmoothScrollbarEnabled(true);
  • 我可以知道你在MylistAdapter()做什么。如果您将这些listTextlistImage 添加到arrayList 或集合中的任何list 中,那么您可以使用arrayList.clear() 方法轻松清除列表。在移动到下一个时,您必须清除列表。这就对了。享受。
  • 请 C 上面关于 MylistAdapter() 功能的问题.. 是的,我在转到下一页之前已经清除了 listText 和 listImage.. 但仍然列表有超过 10 个元素(下一个 20 个和 30 个如果我们再次按下一步)..
  • 你提供`MylistAdapter()`功能的地方。
【解决方案2】:

您只能处理适配器。重置适配器中的数据并调用 adapter.notifyDataSetChanged()。

UDP:

getView() 在每次需要行视图时由系统调用。所以,不要用数据改变列表,在这个方法中调用 notifyDataSetChanged()。

class CustomAdapter extends ArrayAdapter {

    private List<YourItem> items;

    public void setItems(List<YourItem> newItems) {
        items = newItems;
        notifyDataSetChanged();
    }

    public View getView(View convertView, int position, ...) {
        if (convertView == null) {
            // your code
        } else {
            // your code
        }

        YourItem item = items.get(position);

        // set image to convertView

        return convertView;
    }
}

因此,每次您想更新 ListView 时,使用新项目调用 setData()。

还有其他问题吗?

【讨论】:

  • 如何重置适配器以及在哪里恢复适配器数据?我已经清除了 arrayList、listView 和 call'd adapter.notifyDataSetChanged() 的数据,但仍然显示相同的 20 张图像..
  • items - 你的 ArrayList 与适配器中的图像。在适配器内部调用 items.clear() 和 notifyDataSetChanged()。如果您打印适配器的代码,我会更准确地告诉您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多