下面我实际编写了代码,当我滚动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();
}
});
答案 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));
}
我没有你的代码,所以上面的例子尽可能通用。如果您让我们看到代码,我们可以帮助您。