问题描述
当我在列表视图中有更多项目并且我选择一些复选框并向下滚动以选择更多复选框时,上面选择的复选框将被取消选择.
when i have more items in listview and i select some checkbox and scroll it down to select more checkbox then checkbox which were selected above gets deselect.
请帮忙.我可以在哪里保存选中的状态和位置以及何时刷新列表.代码如下.
Plz help. where i can save checked state and position and when i do refresh list.code given below.
protected void onCreate(Bundle savedInstanceState) {
dladapter = new DifferenceListAdapter(this,
prodCodeArr, prodDescArr, serialBatchArr, expDtArr, qtyArr, serialNo, 0);
diffeneceLv.setAdapter(dladapter);}
static class ViewHolder {
TextView srNotv, prodCodetv, prodDesctv, serialBatchNotv, expDatetv, qtytv;
CheckBox consCheckBox;
}
public class DifferenceListAdapter extends BaseAdapter{
Context c;
String[] prodCode, prodDesc, expDate, qty, serialNo, serialBatchNo;
//TextView srNotv, prodCodetv, prodDesctv, serialBatchNotv, expDatetv, qtytv;
EditText consumedEt, disputeEt, OTCEt, patientnameEt;
//final ArrayList<String> chkList = new ArrayList<String>();
ArrayList<Boolean> chkState;
//CheckBox consCheckBox;
private boolean checked = false;
ViewHolder viewHolder;
View row;
int f=0;
public DifferenceListAdapter(Context c, String[] prodCode, String[] prodDesc, String[] serialBatchNo, String[] expDate, String[] qty, String[] serialNo, int f){
this.c = c;
this.prodCode= prodCode;
this.prodDesc= prodDesc;
this.serialBatchNo= serialBatchNo;
this.expDate = expDate;
this.qty=qty;
this.serialNo= serialNo;
this.f= f;
chkState = new ArrayList<Boolean>();
}
public String[] getChecked(){
return chkList.toArray(new String[chkList.size()]);
}
public int getCount() {
// TODO Auto-generated method stub
return prodCode.length;
}
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return serialBatchNo[arg0];
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public CheckBox getCheckBox() {
return viewHolder.consCheckBox;
}
public void toggleChecked() {
checked = !checked;
}
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
final int p= position;
//if (convertView == null) {
viewHolder=new ViewHolder();
LayoutInflater inflater= (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row= inflater.inflate(R.layout.consumedstockitemrow, null);
viewHolder.consCheckBox = (CheckBox) row.findViewById(R.id.conschkbx);
viewHolder.srNotv=(TextView) row.findViewById(R.id.rowcdiffSrNoTv);
viewHolder.prodCodetv=(TextView) row.findViewById(R.id.rowcdiffProductCodeTv);
viewHolder.prodDesctv=(TextView) row.findViewById(R.id.rowcdiffProdDescTv);
viewHolder.serialBatchNotv=(TextView) row.findViewById(R.id.rowcdiffSerialBatchTv);
viewHolder.expDatetv=(TextView) row.findViewById(R.id.rowcdiffExpDtTv);
viewHolder.qtytv=(TextView) row.findViewById(R.id.rowcdiffQtyTv);
viewHolder.consCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
CheckBox cb = (CheckBox) buttonView;
if(cb.isChecked()== true)
{
if(chkList.contains(serialBatchNo[p]))
{
}
else
{
chkList.add(serialBatchNo[p]);
}
}
else
{
if(chkList.contains(serialBatchNo[p]))
{
chkList.remove(serialBatchNo[p]);
}
}
}
});
viewHolder.srNotv.setText(String.valueOf(p+1));
viewHolder.prodCodetv.setText(prodCode[p].toString());
viewHolder.prodDesctv.setText(prodDesc[p].toString());
viewHolder.serialBatchNotv.setText(serialBatchNo[p].toString());
viewHolder.expDatetv.setText(expDate[p].toString());
viewHolder.qtytv.setText(qty[p].toString());
return row;
}
}
推荐答案
我找到了一些变通的解决方案不是最好的,但做他的工作如果 view(CheckBox) 不再可见,它在 checkBox 侦听器上做什么它不允许更改复选框状态所以当你滚动它不会取消你的复选框您仍然需要提供选中复选框的位置列表并在 getView 设置复选框状态
i find some workaround solutionnot the best one but do his jobwhat it do its on checkBox listener if view(CheckBox) not visible anymoreits not alowed to change checkbox stateso when you scroll its will not uncheck your check boxstill you need to provide List of position where checkbox was selectedand on getView set state of checkbox
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(buttonView.isShown()) // chek if checkbox is visible
{
int position = buttonView.getId(); // get position of check box
_selected[position] = buttonView.isChecked(); // set true or false in list of seleted checkboxes
}
}
getView 看起来像这样
getView look like this
@Override
public View getView(int position, View convertView, ViewGroup parentView) {
View view = convertView;
if (view == null) {
LayoutInflater inflater = activity.getLayoutInflater();
view = inflater.inflate(R.layout.layout, null);
ViewHolder viewHolder = new ViewHolder();
viewHolder.tv = (TextView) rowView.findViewById(R.id.text);
viewHolder.cb = (CheckBox) rowView.findViewById(R.id.check_box);
viewHolder.cb.setOnCheckedChangeListener(this);
view.setTag(viewHolder);
}
ViewHolder holder = (ViewHolder) view.getTag();
holder.tv.setText("Text");
holder.cb.setChecked(_selected[position]); //Geting state of check box from array
holder.cb.setId(position); // set check box ID(position in adapter)
return view;
}
ViewHolder
class ViewHolder
{
TextView tv;
CheckBox cb;
}
这篇关于当我滚动自定义列表视图时复选框未选中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!