我正在尝试在列表视图中显示一些数据。 每行包含图像,textview和复选框。 我创建了自己的Adapter类:MyAdapter,它扩展了ArrayAdapter。 当传递给适配器的数组字符串的长度超过10时,列表根本不会显示。
这就是我设置适配器的方式:
setListAdapter(new MyAdapter(this,android.R.layout.simple_list_item_1,R.id.textView1, phonecontacts));
这是我的适配器类:
private class MyAdapter extends ArrayAdapter<String>{
public MyAdapter(Context context, int resource,
int textViewResourceId, String[] phonecontacts) {
super(context, resource, textViewResourceId, phonecontacts);
// TODO Auto-generated constructor stub
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row = inflater.inflate(R.layout.list_item, parent, false);//layout , paremt , false
ImageView iv = (ImageView) row.findViewById(R.id.imageView1);
TextView name = (TextView) row.findViewById(R.id.textView1);
CheckBox checkbox = (CheckBox) row.findViewById(R.id.checkBox1);
name.setText(phonecontacts[position]);
iv.setImageResource(R.drawable.defaultcontact);
return row;
}
}
答案 0 :(得分:0)
可能是内存问题,请尝试使用此处所述:http://developer.android.com/training/improving-layouts/smooth-scrolling.html。
在你的地方我会使用手机联系人作为ArrayList而不是数组。
答案 1 :(得分:0)
每次调用getView()时,您都在为视图充气
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row = inflater.inflate(R.layout.list_item, parent, false);//layout , paremt , false
...
}
添加检查视图是否存在,如果为false则加注
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null)
convertView = inflater.inflate(R.layout.list_item, null);
....
}
答案 2 :(得分:0)
将getView
方法更改为:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = null;
if(convertView == null) {
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_item, parent, false);//layout , paremt , false
}
row = convertView;
ImageView iv = (ImageView) row.findViewById(R.id.imageView1);
TextView name = (TextView) row.findViewById(R.id.textView1);
CheckBox checkbox = (CheckBox) row.findViewById(R.id.checkBox1);
name.setText(phonecontacts[position]);
iv.setImageResource(R.drawable.defaultcontact);
return row;
}
每次给新行充气是非常危险的。它会因内存泄漏而导致崩溃。尝试重用行。