2016-06-19 1 views
0

Я хочу обновить (и удалить) определенные строки в моем ListView, зная атрибуты (id и name) объекта, содержащегося в ListView. Я не знаю позиции, поэтому я не могу использоватьОбновить определенные элементы в ListView

View v = mListView.getChildAt() 

Я использую адаптер для List View, расширяющий в ArrayAdapter моей модели класса.

Как я могу переопределить метод getPosition? Вот мой ListViewAdapter

public class ListViewAdapter extends ArrayAdapter<ModelTimer> { 


    public List<ModelTimer> mListOfTimers; 
    private Context mContext; 

    public ListViewAdapter(Context context, List<ModelTimer> modelTimerList) { 
     super(context, R.layout.item_active_timer, modelTimerList); 
     this.mListOfTimers = modelTimerList; 
     this.mContext = context; 
    } 

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

     // Get the data item for this position 
     ModelTimer modelTimer = getItem(position); 
     // Check if an existing view is being reused, otherwise inflate the view 
     ViewHolder holder;// view lookup cache stored in tag 

     if (convertView == null) { 
      holder = new ViewHolder(); 
      LayoutInflater inflater = LayoutInflater.from(getContext()); 
      convertView = inflater.inflate(R.layout.item_active_timer, parent, false); 
      holder.tvTime = (TextView) convertView.findViewById(R.id.active_timer_timeLeft); 
      holder.tvTitle = (TextView) convertView.findViewById(R.id.active_timer_name); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     // Populate the data into the template view using the data object 
     holder.tvTime.setText(modelTimer.expirationTime); 
     holder.tvTitle.setText(modelTimer.name); 

     // Return the completed view to render on screen 
     return convertView; 
    } 

    @Override 
    public int getPosition(ModelTimer item) { 
     return super.getPosition(item); 
    } 

    // View lookup cache 
    public class ViewHolder { 
     TextView tvTitle; 
     TextView tvTime; 
    } 


} 
+0

Сделать слушатель, который commicate между активностью и вашей adaper ... –

+0

Могу ли я вижу пример? – Alex

ответ

0

Не самый лучший способ сделать это, но смотреть этот код:

@Override 
    public int getPosition(ModelTimer item) { 
    int pos = -1; 
    for(int i = 0; i < mListOfTimers.size(); i++) 
     if(mListOfTimers.name.equals(item.name) // and check id 
     pos = i; 
     return pos; 
    } 
+0

Почему не лучший способ? – Alex

+0

, потому что, если размер элементов слишком велик, этот цикл будет перебирать их в нити ui, и это займет некоторое время. –