更新 ListView 中的特定项目

Posted

技术标签:

【中文标题】更新 ListView 中的特定项目【英文标题】:Update specific Items in ListView 【发布时间】:2016-10-20 17:55:40 【问题描述】:

我想更新(和删除)我的 ListView 中的特定行,知道 ListView 中包含的对象的属性(id 和名称)。我不知道位置,所以我不能使用

View v = mListView.getChildAt()

我正在为列表视图使用适配器,它扩展了我的模型类的 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;
    



【问题讨论】:

制作一个监听器,在活动和你的适配器之间进行通信...... 我能看到任何例子吗? 【参考方案1】:

这不是最好的方法,但看看这段代码:

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

【讨论】:

为什么不是最好的方法? 因为如果item的size太大,这个循环会在ui线程中迭代,需要一些时间。

以上是关于更新 ListView 中的特定项目的主要内容,如果未能解决你的问题,请参考以下文章

按特定值对 ListView 或 ListView.ItemTemplate 进行排序

使用 Kotlin 从 Android 上 ViewModel 中的 LiveData 更新 ListView 中的元素

从 Delegate 访问 Listview currentIndex

如何检查 ListView 项目是不是被选中

异步更改 ListView 中的特定项目

关于理解布局单位