2013-04-04 2 views
0

У меня есть пользовательский адаптер простирается от arrayadapter:Как обновить ListView при щелчке элемента на ListView

@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; 
} 

Я пытаюсь щелкнуть по пункту ivIcon, ряд listview будет удален, и listview должны обновить, но У меня нет способа обновить listview. Мне нужна помощь

ответ

1

Ваш выбор:

  • Используйте функции ArrayAdapter для изменения основного списка (добавить, вставить, удалить, прозрачные и т.д.)
  • Пересоздайте ArrayAdapter с новые данные списка. (Использует много ресурсов и сбор мусора.)
  • Создайте свой собственный класс, полученный из BaseAdapter и ListAdapter, который позволяет изменять структуру данных, лежащую в основе списка.
  • Использовать notifyDataSetChanged при каждом обновлении списка. Чтобы вызвать его в UI-Thread, используйте метод runOnUiThread для Activity. Тогда notifyDataSetChanged будет работать.

Пример

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

    public void run() { 
     adapter.notifyDataSetChanged(); 
    } 
}); 
+0

Я должен с помощью нити, например, для обновления, когда изменение списка? – rocky

+1

Невозможно обновить адаптер в getView()? – rocky

+0

Это полезно, спасибо – rocky

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(); 

     } 
    } 
Смежные вопросы