-1

下面我实际上在滚动列表视图时编写了我的代码,复选框处于其原始位置,任何代码帮助将不胜感激。

 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();
        }
    });
4

1 回答 1

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选中了弹出的项目,则检查了CheckBoxin 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));
    }

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

于 2012-07-20T11:44:05.940 回答