最佳答案
所以我有这个问题,我以前有,自然我要求帮助对 给你。Luksprog 的回答很棒,因为我不知道 ListView 和 GridView 是如何利用回收视图优化自身的。因此,在他的建议下,我能够更改如何将视图添加到 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");
//the following is my original LinearLayout.LayoutParams for correctly setting the TextView Height
//new LinearLayout.LayoutParams(0, (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 60, getResources().getDisplayMetrics()), 1.0f)
if(position == 0) {
Log.d("DayViewActivity", "This should only be running when position is 0. The position is: "+position);
layout.addView(create);
}
return convertView;
}
}
问题是当我滚动的时候,会发生这种情况,而不是在位置0... 看起来像位置6和位置8,加上它把2放在位置8。现在我仍然在尝试掌握使用 ListView 和 GridView 的窍门,所以我不明白为什么会发生这种情况。我提出这个问题的主要原因之一是为了帮助那些可能不知道 ListView 和 GridView 的回收视图,或者按照这个 文章的说法,ScrapView 机制的人。
稍后编辑
添加链接到一个谷歌 IO 谈话,这基本上是所有你需要了解 ListView 如何工作。链接完全被这些评论吸引住了。所以 user3427079很好地更新了这个链接。给你这是为了方便访问。