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 をクリックしようとするとivIcon、行listviewが削除されてlistview更新されるはずですが、リストビューを更新する方法がありません。私は助けが必要です

4

2 に答える 2

3

選択肢は次のとおりです。

  • ArrayAdapter の関数を使用して、基になるリストを変更します (追加、挿入、削除、クリアなど)。
  • 新しいリスト データを使用して ArrayAdapter を再作成します。(多くのリソースとガベージ コレクションを使用します。)
  • BaseAdapter および ListAdapter から派生した独自のクラスを作成して、基になる List データ構造を変更できるようにします。
  • リストが更新されるたびに、notifyDataSetChanged を使用します。UI スレッドで呼び出すには、アクティビティの 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 に答える