1

我有一个从 arrayadapter 扩展的自定义适配器:

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

    final ViewHolder holder;

    if (convertView == null) {
        LayoutInflater vi = (LayoutInflater) getContext().getSystemService(
                Context.LAYOUT_INFLATER_SERVICE);
        convertView = vi.inflate(R.layout.list_item, null);

        holder = new ViewHolder();
        holder.tvName = (TextView) convertView.findViewById(R.id.tvName);
        holder.tvPrice = (TextView) convertView.findViewById(R.id.tvPrice);
        holder.ivItem = (ImageView) convertView.findViewById(R.id.ivItem);
        holder.ivIcon = (ImageView) convertView.findViewById(R.id.ivIcon);
        holder.ivArrow = (ImageView) convertView.findViewById(R.id.ivArrow);

        convertView.setTag(holder);

    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.tvName.setText(item.get(position).getName());
    holder.tvPrice.setText(item.get(position).getPrice());
    holder.ivItem.setImageBitmap(item.get(position).getAvatar());
    holder.ivArrow.setImageDrawable(item.get(position).getArrow());
    holder.ivIcon.setImageDrawable(item.get(position).getIcon());


            holder.ivIcon.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {

        /*...My code...*/
    }
    });

    return convertView;
}

我尝试单击 item ivIconlistview将删除一行并listview刷新,但我无法刷新 listview。我需要帮助

4

2 回答 2

3

您的选择是:

  • 使用ArrayAdapter的功能修改底层List(添加、插入、删除、清除等)
  • 使用新的 List 数据重新创建 ArrayAdapter。(使用大量资源和垃圾收集。)
  • 创建您自己的从 BaseAdapter 和 ListAdapter 派生的类,该类允许更改基础 List 数据结构。
  • 每次更新列表时使用 notifyDataSetChanged。要在 UI 线程上调用它,请使用 Activity 的 runOnUiThread 方法。然后 notifyDataSetChanged 将起作用。

例子

final ArrayAdapter adapter = ((ArrayAdapter)getListAdapter());
runOnUiThread(new Runnable() {

    public void run() {
        adapter.notifyDataSetChanged();
    }
});
于 2013-04-04T10:34:54.673 回答
0

此代码将为您提供帮助。

假设您有类似的适配器

 ListView = listview;
 customListView mcustomListView = new customListView(this);

当您单击 getView 中的列表项时

 holder.ivIcon.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {

         customListView  mcustomListView = (customListView ) mlvItem.getAdapter();
mcustomListView .notifyDataSetChanged();

      }
  }
于 2013-04-04T10:44:40.310 回答