列表视图不显示超过10个项目

时间:2013-12-29 10:23:54

标签: android

我正在尝试在列表视图中显示一些数据。 每行包含图像,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;
        }

    }

3 个答案:

答案 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;
}

每次给新行充气是非常危险的。它会因内存泄漏而导致崩溃。尝试重用行。