在android列表视图中重复的数据

时间:2011-09-09 09:04:31

标签: android listview adapter

我有一个列表视图,其适配器位于不同包中的不同类中。现在我必须从数据库中获取数据,然后使用此数据为我的列表视图设置Adapter。所以我创建了一个ArryList并在Adapter的构造函数中传递它,同时将它发送到列表视图。但问题是数据正在重复。例如,在arraylist中有12个不同的字符串,但我得到的是 - 依次为前五个元素,然后重复相同的五个元素。数据计数始终正确,但位置始终为0,1,2,3,4。我无法理解问题所在。这是代码 -

public class CheckboxAdapter extends BaseAdapter{

    LayoutInflater inflater ;
    ArrayList<String> mData = new ArrayList<String>();

    //constructor for lesion adapter
    public CheckboxAdapter (Context context, ArrayList<String> data){
        inflater = LayoutInflater.from(context);
        mData = data;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return mData.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null){
            Log.v("pos", ""+position);
            convertView = inflater.inflate(R.layout.e_lesion_liststyle, null);          
            final CheckBox cb = (CheckBox) convertView.findViewById(R.id.disease_lesion_checkbox);
            cb.setText(mData.get(position));
            cb.setOnClickListener(new OnClickListener() {           
                @Override
                public void onClick(final View v) {
                    cb.setButtonDrawable(R.drawable.check_box_1);
                }
            });
        }//end of if condition
        return convertView;
    }

1 个答案:

答案 0 :(得分:7)

尝试这个..只需编写所有代码,期望膨胀代码..

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null){
            Log.v("pos", ""+position);
            convertView = inflater.inflate(R.layout.e_lesion_liststyle, null);   
           }       //end of if condition
            final CheckBox cb = (CheckBox) convertView.findViewById(R.id.disease_lesion_checkbox);
            cb.setText(mData.get(position));
            cb.setOnClickListener(new OnClickListener() {           
                @Override
                public void onClick(final View v) {
                    cb.setButtonDrawable(R.drawable.check_box_1);
                }
            });

        return convertView;
    }