Android ListView使用ViewHolder的替代方法
我已经创建了一个Android ListView使用ViewHolder的替代方法,android,android-listview,Android,Android Listview,我已经创建了一个ListView及其自定义适配器。但由于某些原因,我不允许从视图持有者获取项目 在我的例子中,ViewHolder只有一个变量,即LinearLayout线性布局包含其他子视图(在运行时确定和创建)。当我使用ViewHolder并设置holder对象的标记时,在scroll上我再次获得相同的视图 有没有其他方法可以停止适配器在滚动时创建视图 或者,在滚动时,如何清除视图的引用 我已经找到了这个,但我认为这不管用 setRecyclerListener(new Recycl
ListView
及其自定义适配器。但由于某些原因,我不允许从视图持有者
获取项目
在我的例子中,ViewHolder
只有一个变量,即LinearLayout
<代码>线性布局包含其他子视图(在运行时确定和创建)。当我使用ViewHolder并设置holder对象的标记时,在scroll上我再次获得相同的视图
setRecyclerListener(new RecyclerListener() {
@Override
public void onMovedToScrapHeap(View view) {
//from here can we use this to clean the memory
}
});
ViewHolder
是指包含listitem布局ID的holder。
这是一种优化,避免每次通过数据容器(如arrayList)创建新的listitem进行显示时调用findViewById
不能在创建项目视图之间停止适配器。
仅创建显示的项目。
convertView充当循环对象,用于在上/下滚动时创建后续视图。
您将无法使用view holder实现您试图实现的目的。
示例用法如下所示
@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;
}
ViewHolder的作用是包含对布局子视图的引用,而不是布局本身。@FrankN.Stein是的,您是对的。但是我在单元格中添加了一个视图(线性布局)。请删除无用的视图固定器模式,并在
getView
方法中使用convertView
参数是的,但我需要的是停止每次在不使用ViewHolder的情况下重新创建视图。@AkhileshMani然后像上面一样使用convertView
answer@pskink我不明白如何使用convertview。@AkhileshManiif(convertview==null){…
还可以阅读getView(int位置,视图convertview,视图组父级)
documentation@pskink在我的情况下,这将不起作用,因为我没有任何视图的Id。布局包含子视图(在运行时决定和创建的子视图),此单个布局充当列表单元格。