我试图将文件数组加载到ListView ...这里我的文件数组从DB返回1条记录。我将此数组加载到我的自定义arrayAdapter ..
问题:
CustomArrayAdapter getView()方法为第0个位置调用3次
第一次convertView将为null
第二次convertView不为空
第三次convertView再次为null
这是我的代码,
ArrayList files = null;
try {
files = db.getRecords(tableName, null, Type LIKE '.txt' , null, null, null, null);
} catch (Exception e) {
e.printStackTrace();
}
/*** files.size() = 1 ***/
infoAdt = new InfoAdapter(mContext, R.layout.custome_view, files);
setListAdapter(infoAdt);
public class InfoAdapter extends ArrayAdapter<Object> {
public InfoAdapter(Context context, int textViewResourceId, List<Object> objects) {
super(context, textViewResourceId,objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inf = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inf.inflate (R.layout.custome_view, parent, false);
ViewHolder viewHolder = new ViewHolder();
viewHolder.nameView = (TextView) convertView.findViewById(R.id.name);
viewHolder.typeView = (TextView) convertView.findViewById(R.id.type);
viewHolder.sizeView = (TextView) convertView.findViewById(R.id.size);
convertView.setTag(viewHolder);
}
ViewHolder holder = (ViewHolder) convertView.getTag();
FileItem f = (FileItem) getItem(position);
String[] fileNameAndType= f.getFileName().split("\\.");
holder.nameView.setText(fileNameAndType[0]);
holder.typeView.setText(fileNameAndType[1]);
return convertView;
}
}
class ViewHolder{
TextView nameView;
TextView typeView;
TextView sizeView;
}
答案 0 :(得分:2)
正常情况下多次请求索引0视图。测量/布局需要它。
您可以在getView()
中放置一个调试器断点,以了解为什么在每种情况下通过观察调用堆栈调用适配器getView()
。
确保您的ListView
不在需要多个度量/布局传递的布局中,例如LinearLayout
具有权重或RelativeLayout
具有复杂约束。
出于性能原因,让getView()
尽快返回视图。