ListView的回收机制如何运作所以我之前遇到过这个问题,我自然就在这里寻求帮助。Luksprog的答案很棒,因为我不知道ListView和GridView如何通过回收视图优化自身。因此,根据他的建议,我能够改变将Grid添加到GridView的方式。问题是现在我有一些没有意义的事情。这是getView我的BaseAdapter:public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
convertView = inflater.inflate(R.layout.day_view_item, parent, false);
}
Log.d("DayViewActivity", "Position is: "+position);
((TextView)convertView.findViewById(R.id.day_hour_side)).setText(array[position]);
LinearLayout layout = (LinearLayout)convertView.findViewById(R.id.day_event_layout);
//layout.addView(new EventFrame(parent.getContext()));
TextView create = new TextView(DayViewActivity.this);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0, (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
62, getResources().getDisplayMetrics()), 1.0f);
params.topMargin = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, getResources().getDisplayMetrics());
params.bottomMargin = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, getResources().getDisplayMetrics());
create.setLayoutParams(params);
create.setBackgroundColor(Color.BLUE);
create.setText("Test");
}
return convertView;
}}问题是当我滚动时,发生这种情况,而不是在位置0 ...看起来像位置6和位置8,再加上它将两个放在位置8.现在我仍然试图使用ListView和GridView,所以我做不明白为什么会这样。我提出这个问题的一个主要原因是帮助那些可能不了解ListView和GridView的回收View的人,或者本文的方式,ScrapView机制。
4 回答
![?](http://img1.sycdn.imooc.com/5333a1d100010c2602000200-100-100.jpg)
饮歌长啸
TA贡献1951条经验 获得超3个赞
请注意,在Holder模式中,如果在Holder对象中设置位置,则应每次都设置它,例如:
@Overridepublic final View getView(int position, View view, ViewGroup parent) { Holder holder = null; if (view == null) { LayoutInflater inflater = (LayoutInflater) App.getContext() .getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = inflater.inflate(getContainerView(), parent, false); holder = getHolder(position, view, parent); holder.setTag(tag); view.setTag(holder); } else { holder = (Holder) view.getTag(); } holder.position = position; draw(holder); return holder.getView();}
这是一个抽象类的例子,其中
getHolder(position, view, parent);
完成所有的设置操作
ImageViews, TextViews, etc..
![?](http://img1.sycdn.imooc.com/533e4d660001312002000200-100-100.jpg)
慕妹3146593
TA贡献1820条经验 获得超9个赞
![?](http://img1.sycdn.imooc.com/54586653000151cd02200220-100-100.jpg)
守着一只汪
TA贡献1872条经验 获得超3个赞
Recyclerview只是一个以高效的方式管理动态视图添加的包装类,即重用已经创建的视图。
想想recyclerview适配器,调用方法的顺序是 -
getItemCount - 首先调用它,以便适配器知道需要创建或管理多少视图。
getItemViewType-接下来调用此方法以了解需要膨胀的视图类型。
onCreateViewHolder - 接下来调用它来知道要膨胀的视图。
onBindViewHolder-进入此步骤适配器将为您提供viewholder的实例,该实例持有相对于位置的膨胀视图,因此您可以在此处设置视图上的数据。
添加回答
举报
0/150
提交
取消