因此,我遇到了以前遇到的问题,很自然地我在这里寻求帮助。Luksprog的答案很好,因为我不知道ListView和GridView如何通过回收Views进行优化。因此,根据他的建议,我能够更改将视图添加到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,再加上两个都在位置8。现在,我仍然试图摆脱使用ListView和GridView的困扰,所以我不明白为什么会这样。我提出这个问题的主要原因之一是帮助可能不了解ListView和GridView的回收视图或本文所说的ScrapView机制的其他人。
以后编辑
添加链接到google IO对话,基本上就是了解ListView的工作原理所需要的。链接对评论不屑一顾。因此,user3427079足以更新该链接。这是为了方便访问。
0
)。
ListView
需要显示新行(例如继续向下滚动/向上滚动)时使用。问题在于,刚刚消失的视图将用于将来的所需位置TextView
,这已经成为问题。要解决该问题,必须在getView
方法中getView
除之外的其他位置调用该方法,然后将其删除0
。