我创建了一个ListView
及其自定义适配器。但由于某种原因,我不允许从ViewHolder
获取物品。
在我的情况下,ViewHolder
只有一个变量且LinearLayout
。 LinearLayout
包含其他子视图(在运行时决定并创建)。当我使用ViewHolder并设置holder对象的标签时,在滚动时我会再次获得相同的视图。
我找到了这个,但我认为这不会起作用。
setRecyclerListener(new RecyclerListener() {
@Override
public void onMovedToScrapHeap(View view) {
//from here can we use this to clean the memory
}
});
答案 0 :(得分:0)
ViewHolder
是指包含listitem布局ID的持有者。
每次通过遍历数据容器创建新的列表项目以进行显示时,优化避免调用findViewById
。数组列表。
您无法在创建项目视图之间停止适配器。 仅显示显示的项目。 convertView充当被回收的对象,用于在向上/向下滚动时创建后续视图。 您将无法使用视图持有者达到您想要达到的目的。 示例用法如下。
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View v = convertView;
ViewHolder viewHolder = null;
if(convertView == null)
{
v = LayoutInflater.from(StockDetailsActivity.this).inflate(R.layout.stock_details_list_item, null);
viewHolder = new ViewHolder();
viewHolder.model_name_tv = (TextView) v.findViewById(R.id.model_name);
viewHolder.model_type_iv = (ImageView) v.findViewById(R.id.model_type_icon);
viewHolder.model_type_tv = (TextView) v.findViewById(R.id.model_type_desc);
viewHolder.model_stock_tv = (TextView) v.findViewById(R.id.model_stock_value);
v.setTag(viewHolder);
}
else
viewHolder = (ViewHolder) v.getTag();
stockCursor.moveToPosition(position);
// logic to update data to views as appropriate goes here
return v;
}
public class ViewHolder{
public TextView model_name_tv;
public ImageView model_type_iv;
public TextView model_type_tv;
public TextView model_stock_tv;
}