Mat*_*anb 9 android recycle android-arrayadapter
我有一个关于在自定义数组适配器的getView方法中回收视图的问题不明确.
我理解元素是可以重用的,但是我怎么知道在if语句的第一部分中要实现什么,以及在第二部分中实现什么?
现在我有以下代码.由于删除了语句的第二部分中的代码,我得出了这个问题,这导致了前9个元素的列表,这些元素重复了多次而不是所有元素.我真的不知道究竟是什么造成的......
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
title = getItem(position).getTitle();
size = calculateFileSize(position);
txtTitle = (TextView) row.findViewById(R.id.txtTitle);
tvFileSize = (TextView) row.findViewById(R.id.tvFileSize);
txtTitle.setText(title);
tvFileSize.setText(size);
} else {
title = getItem(position).getTitle();
size = calculateFileSize(position);
txtTitle = (TextView) row.findViewById(R.id.txtTitle);
tvFileSize = (TextView) row.findViewById(R.id.tvFileSize);
txtTitle.setText(title);
tvFileSize.setText(size);
}
return row;
}
Run Code Online (Sandbox Code Playgroud)
Sam*_*Sam 13
我理解元素是可以重用的,但是我怎么知道在if语句的第一部分中要实现什么,以及在第二部分中实现什么?
一旦掌握了它,该组织就非常简单:
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
/* This is where you initialize new rows, by:
* - Inflating the layout,
* - Instantiating the ViewHolder,
* - And defining any characteristics that are consistent for every row */
} else {
/* Fetch data already in the row layout,
* primarily you only use this to get a copy of the ViewHolder */
}
/* Set the data that changes in each row, like `title` and `size`
* This is where you give rows there unique values. */
return convertView;
}
Run Code Online (Sandbox Code Playgroud)
有关ListView的RecycleBin如何工作的详细解释以及为什么ViewHolders非常重要,请观看Turbo为您的用户界面充电,这是Android的主要ListView程序员的Google I/O演示.
你想ViewHolder在你的班里创建一个班级MainActivity.就像是
static class ViewHolder
{
TextView tv1;
TextView tv2;
}
Run Code Online (Sandbox Code Playgroud)
然后在你getView的第一次Views从你的xml中获取你的xml if并在之后重用它们else
View rowView = convertView;
if (rowView == null)
{
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
rowView = inflater.inflate(R.layout.layout_name_to_inflate, parent, false);
holder = new ViewHolder();
holder.tv1= (TextView) rowView.findViewById(R.id.textView1);
holder.tv2 = (RadioGroup) rowView.findViewById(R.id.textView2);
rowView.setTag(holder);
}
else
{
holder = (ViewHolder) rowView.getTag();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15645 次 |
| 最近记录: |