CheckBox在Android中显示异常行为

时间:2012-07-20 10:41:20

标签: android android-listview

下面我实际编写了代码,当我滚动listview时,复选框占据了原来的位置,代码的任何帮助都将受到赞赏。

 cp.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
        // TODO Auto-generated method stub
        cp.setChecked(true);
        cx.setChecked(false);

        ck.setChecked(false);
        int a=1;

        String c=getListView().getItemAtPosition(position).toString();
        updatetable(c, "FULL");
        //Toast.makeText(getApplicationContext(), c+"full", Toast.LENGTH_LONG).show();
        // Toast.makeText(getApplicationContext(), "year", Toast.LENGTH_LONG).show();
    }
});

 cx.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {

        // TODO Auto-generated method stub
        cx.setChecked(true);
        cp.setChecked(false);
        ck.setChecked(false);
        int a=1;
        String c=getListView().getItemAtPosition(position).toString();
        updatetable(c, "CRITICAL");

        //Toast.makeText(getApplicationContext(), c+"ok", Toast.LENGTH_LONG).show();
    }
});

 ck.setOnClickListener(new OnClickListener() {

        public void onClick(View v)  {
            ck.setOnCheckedChangeListener(null);
            // TODO Auto-generated method stub
            ck.setChecked(true);
            cp.setChecked(false);
            cx.setChecked(false);
            int a=1;
    String c=getListView().getItemAtPosition(position).toString();
    updatetable(c, "FINISH");
            //Toast.makeText(getApplicationContext(), c+"fineshed", Toast.LENGTH_LONG).show();
        }
    });

1 个答案:

答案 0 :(得分:0)

你的问题不明确,但我认为我遇到了问题。

我认为这不是CheckBox的问题。我认为你的适配器出了问题。

public class MyAdapter extends BaseAdapter {
    private List<Something> mList;
    private Context mContext;

    public MyAdapter(Context context, List<Something> list) {
        mContext = context;
        mList = list;
    }

    @Override
    public int getCount() {
        return mList.getSize();
    }

    @Override
    public Object getItem(int position) {
        return mList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            LayoutInflater inflater = mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.row_layout, null);
        }

        CheckBox checkbox = (CheckBox) convertView.findViewById(R.id.checkbox);
        /* Here you should set your checkbox state */
    }
}

我认为您的问题是convertView

当您向下滚动ListView时,弹出的项目不会被销毁,但会被回收。回收的物品将以convertView的形式返回给您。 convertView 未清除,因此如果选中了弹出项目中的CheckBox,则会检查CheckBox中的convertView

您必须保留List<Boolean> states,以便保存所有项目CheckBox的状态。然后:

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            LayoutInflater inflater = mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.row_layout, null);
        }

        CheckBox checkbox = (CheckBox) convertView.findViewById(R.id.checkbox);
        checkBox.setChecked(states.get(position));
    }

我没有你的代码,所以上面的例子尽可能通用。如果您让我们看到代码,我们可以帮助您。