【发布时间】:2021-03-20 02:27:25
【问题描述】:
如果 .settag() 在 RecyclerViewAdapter 中设置,我不明白它是如何工作的。这是我的代码:
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
try {
JSONObject _temp_json_object = new JSONObject( String.valueOf( mData.get( position ) ) );
holder.tv_rssi.setText( _temp_json_object.getJSONObject( "Wifi" ).getString( "RSSI" ));
final String _topic = _temp_json_object.getString("Topic");
holder.tv_topic.setTag( _topic );
holder.tv_topic.setText( _topic );
}
...
稍后尝试使用 findViewWithTag 访问此标记时,有时它会返回正确的 TextView id,但有时会返回 null 并且我的代码会失败。有时意味着,我完全不知道触发器是什么,但通常会在应用程序进入后台并恢复时发生,然后 findviewwithtag 返回 null。
if (RecyclerView.findViewWithTag( _received_topic ) != null) {
_arrayList.set( _new_obj );
_adapter_rv.notifyItemChanged(id); //previously calculated id in json array position
}
我在不同的帖子中发现in this forum
通过视图回收机制,视图将被重用,.settag() 信息丢失。
因为我的目标是使用实时数据更新项目,所以我需要保留有关每个项目的持久信息,以便在在线数据到达时知道要更新什么。
知道如何实现这一目标吗?如果有更好的方法然后使用 .settag() 请告诉我。还在学习:-)
顺便说一句,我在 GridView 中使用完全相同的方法标记项目,并且 .settag() 是持久的,问题仅与 RecyclerView 有关
【问题讨论】:
标签: android android-recyclerview