android listview中复选框的状态

android listview中复选框的状态,android,arraylist,android-listview,android-checkbox,Android,Arraylist,Android Listview,Android Checkbox,我想从列表视图中选择所有族id。我将家庭id添加到单独的 单击相应的复选框时显示arraylist。滚动列表视图时,arraylist中的值丢失 下面是我的代码 public class FamilyList extends Activity{ ListView fam_list; DataAdapter myadapt; ArrayList<ListClass> familyarraylist; ArrayList<String> familyselectedl

我想从列表视图中选择所有族id。我将家庭id添加到单独的 单击相应的复选框时显示arraylist。滚动列表视图时,arraylist中的值丢失

下面是我的代码

    public class FamilyList extends Activity{
ListView fam_list;
DataAdapter myadapt;
ArrayList<ListClass> familyarraylist;
ArrayList<String> familyselectedlist;
Button show;
  @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
Log.i("zacharia", "inside oncreate");
setContentView(R.layout.activity_familylist);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
fam_list=(ListView) findViewById(R.id.familylist);
myadapt=new DataAdapter(this);
final TextView empty=(TextView) findViewById(R.id.emptyView);
empty.setText("No Data Found");
familyarraylist= myadapt.getfamilylist("All");
FamilyListAdapter familyadapter=new FamilyListAdapter(this, R.layout.family_list_view,familyarraylist);
fam_list.setAdapter(familyadapter);
fam_list.setEmptyView(empty);


familyselectedlist=new ArrayList<String>();

ImageButton button=(ImageButton) findViewById(R.id.imageButton1);
button.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {
        EditText edit=(EditText) findViewById(R.id.editText1);
        if(edit.getText().length()>0){
            if(myadapt==null){
            myadapt=new DataAdapter(FamilyList.this);
            }
             familyarraylist=myadapt.getfamilylist(edit.getText().toString());
            fam_list.setAdapter(new FamilyListAdapter(FamilyList.this, R.layout.family_list_view, familyarraylist));                }
        else{
            if(myadapt==null){
                myadapt=new DataAdapter(FamilyList.this);
                }
            familyarraylist=myadapt.getfamilylist("All");
            fam_list.setAdapter(new FamilyListAdapter(FamilyList.this, R.layout.family_list_view,familyarraylist ));    
        }
        fam_list.setEmptyView(empty);

    }
});


show=(Button) findViewById(R.id.button1);
show.setOnClickListener(new OnClickListener() {

    public void onClick(View arg0) {
        for(int i=0;i<familyselectedlist.size();i++){
            Log.i("zacharia", familyselectedlist.get(i));
        }
        MainActivity.selected_list=true;
        MainActivity.selected_family_id_array=familyselectedlist;           
        FamilyList.this.finish();

    }
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
getMenuInflater().inflate(R.menu.activity_list, menu);
return true;
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
// TODO Auto-generated method stub
if(item.getItemId()==R.id.item1){
    final SharedPreferences prefs=getSharedPreferences("search_mode",  Activity.MODE_WORLD_READABLE);
    int pos=prefs.getInt("position", 0);
    new AlertDialog.Builder(this).setTitle("Search By")
            .setSingleChoiceItems(new String[]{"Name","House Name"}, pos, new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface dialog, int which) {
                    Editor edit=prefs.edit();
                    edit.putInt("position", which);
                    edit.commit();
                    dialog.dismiss();
                }
            }).show();
}
return true;
}
static class ViewHolder {
protected TextView id_text,id_name,id_address;
protected CheckBox id_check;
   }
class FamilyListAdapter extends ArrayAdapter<ListClass>{

private ArrayList<ListClass> list_array;
Context context;


boolean checkchange=false;
ListClass obj;
public FamilyListAdapter(Context context, int textViewResourceId,
        ArrayList<ListClass> objects) {
    super(context, textViewResourceId, objects);
    this.context=context;
    list_array=objects;

}

@Override
public ListClass getItem(int position) {
    // TODO Auto-generated method stub
    return list_array.get(position);
}

public int getFamilyId(int position){
    return list_array.get(position).getFamilyid();
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    View v=convertView;
    if(v==null){
        LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v=inflater.inflate(R.layout.family_list_view, null);
        final ViewHolder holder = new ViewHolder();
        obj=getItem(position);
        holder.id_text=(TextView) v.findViewById(R.id.list_familyid);
        holder.id_text.setText(""+obj.getFamilyid());
        holder.id_name=(TextView) v.findViewById(R.id.list_name);
        holder.id_name.setText(""+obj.getHeadname());
        holder.id_address=(TextView) v.findViewById(R.id.list_address);
        holder.id_address.setText(""+obj.getAddress());
        holder.id_check=(CheckBox) v.findViewById(R.id.check_familyview);
        Log.i("zacharia", "check result:"+ getFamilyId(position)+"  "+familyselectedlist.contains(""+getFamilyId(position)));
        holder.id_check.setSelected(false);
        if(familyselectedlist.contains(""+getFamilyId(position))){

            holder.id_check.setSelected(true);
        }


        holder.id_check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                Log.i("zacharia", "inside on change");

                if(isChecked){
                    familyselectedlist.add(""+getFamilyId(position));
                }
                else{
                    familyselectedlist.remove(""+getFamilyId(position));
                }

            }
        });
        v.setTag(holder);
        holder.id_check.setTag(getFamilyId(position));
    }
    else{
        v=convertView;
        ((ViewHolder)v.getTag()).id_check.setTag(getFamilyId(position));
    }
    obj=getItem(position);
    ViewHolder holder = (ViewHolder) v.getTag();
    holder.id_text.setText(""+obj.getFamilyid());
    holder.id_name.setText(obj.getHeadname());
    holder.id_address.setText(obj.getAddress());
    if(familyselectedlist.contains(""+getFamilyId(position))){      
    holder.id_check.setChecked(true);
    }
    else{
        holder.id_check.setChecked(false);
    }

    return v;
}
公共类FamilyList扩展活动{
列表视图fam_列表;
数据适配器myadapt;
ArrayList家族成员名单;
ArrayList familyselectedlist;
按钮显示;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
Log.i(“撒迦利亚”,“内部创建”);
setContentView(R.layout.activity\u familylist);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT\u输入\u状态\u始终\u隐藏);
fam_list=(ListView)findViewById(R.id.familylist);
myadapt=新数据适配器(此);
final TextView empty=(TextView)findViewById(R.id.emptyView);
empty.setText(“未找到数据”);
FamilyAryList=myadapt.getfamilylist(“全部”);
FamilyListAdapter familyadapter=新的FamilyListAdapter(此,R.layout.family\u列表\u视图,FamilyAryList);
fam_list.setAdapter(familyadapter);
fam_list.setEmptyView(空);
familyselectedlist=新建ArrayList();
ImageButton按钮=(ImageButton)findViewById(R.id.imageButton1);
setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
EditText edit=(EditText)findViewById(R.id.editText1);
if(edit.getText().length()>0){
如果(myadapt==null){
myadapt=新数据适配器(FamilyList.this);
}
FamilyAryList=myadapt.getfamilylist(edit.getText().toString());
fam_list.setAdapter(新的FamilyListAdapter(FamilyList.this,R.layout.family_list_视图,familyAryList));}
否则{
如果(myadapt==null){
myadapt=新数据适配器(FamilyList.this);
}
FamilyAryList=myadapt.getfamilylist(“全部”);
fam_list.setAdapter(新的FamilyListAdapter(FamilyList.this,R.layout.family_list_视图,familyAryList));
}
fam_list.setEmptyView(空);
}
});
show=(按钮)findViewById(R.id.button1);
show.setOnClickListener(新的OnClickListener(){
公共void onClick(视图arg0){

对于(inti=0;i只需将以下代码移出if条件(if(v==null)):

只有在未获得要重用的视图时,才可以设置侦听器。但在重用现有视图时,仍然必须设置侦听器。因此,如果convertView不为null,则它已随旧onClickListener一起出现。此onClickListener使用了错误的位置(从旧视图)


因此,您不仅应该在(v==null)时设置OnClickListener。

我对代码做了一些更改,并将arraylist的实例(用于选定的\u ID)传递给它工作的适配器

以下是我的代码:

public class FamilyList extends Activity{
ListView fam_list;
DataAdapter myadapt;
ArrayList<ListClass> familyarraylist;
ArrayList<String> familyselectedlist;
Button show;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
Log.i("zacharia", "inside oncreate");
setContentView(R.layout.activity_familylist);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
fam_list=(ListView) findViewById(R.id.familylist);
myadapt=new DataAdapter(this);
final TextView empty=(TextView) findViewById(R.id.emptyView);
empty.setText("No Data Found");
familyarraylist= myadapt.getfamilylist("All");
familyselectedlist=new ArrayList<String>();

FamilyListAdapter familyadapter=new FamilyListAdapter(this, R.layout.family_list_view,familyarraylist,familyselectedlist);
fam_list.setAdapter(familyadapter);
fam_list.setEmptyView(empty);




ImageButton button=(ImageButton) findViewById(R.id.imageButton1);
button.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {
        EditText edit=(EditText) findViewById(R.id.editText1);
        if(edit.getText().length()>0){
            if(myadapt==null){
            myadapt=new DataAdapter(FamilyList.this);
            }
            familyarraylist=myadapt.getfamilylist(edit.getText().toString());
            fam_list.setAdapter(new FamilyListAdapter(FamilyList.this, R.layout.family_list_view, familyarraylist,familyselectedlist));             }
        else{
            if(myadapt==null){
                myadapt=new DataAdapter(FamilyList.this);
                }
            familyarraylist=myadapt.getfamilylist("All");
            fam_list.setAdapter(new FamilyListAdapter(FamilyList.this, R.layout.family_list_view,familyarraylist,familyselectedlist));  
        }
        fam_list.setEmptyView(empty);

    }
});


show=(Button) findViewById(R.id.button1);
show.setOnClickListener(new OnClickListener() {

    public void onClick(View arg0) {
        for(int i=0;i<familyselectedlist.size();i++){
            Log.i("zacharia", familyselectedlist.get(i));
        }

        MainActivity.selected_list=true;
        MainActivity.selected_family_id_array=familyselectedlist;           
        FamilyList.this.finish();

    }
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
getMenuInflater().inflate(R.menu.activity_list, menu);
return true;
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
// TODO Auto-generated method stub
if(item.getItemId()==R.id.item1){
    final SharedPreferences prefs=getSharedPreferences("search_mode", 0);
    int pos=prefs.getInt("position", 0);
    new AlertDialog.Builder(this).setTitle("Search By")
            .setSingleChoiceItems(new String[]{"Name","House Name"}, pos, new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface dialog, int which) {
                    Editor edit=prefs.edit();
                    edit.putInt("position", which);
                    edit.commit();
                    dialog.dismiss();
                }
            }).show();
}
return true;
}

class FamilyListAdapter extends ArrayAdapter<ListClass>{

private ArrayList<ListClass> list_array;
Context context;
ArrayList<String> selectedlist;
TextView id_text,id_name,id_address;
CheckBox id_check;

boolean checkchange=false;
ListClass obj;
public FamilyListAdapter(Context context, int textViewResourceId,
        ArrayList<ListClass> objects,ArrayList<String> selectedlist) {
    super(context, textViewResourceId, objects);
    this.context=context;
    list_array=objects;
    this.selectedlist=selectedlist;
}

@Override
public ListClass getItem(int position) {
    // TODO Auto-generated method stub
    return list_array.get(position);
}

public int getFamilyId(int position){
    return list_array.get(position).getFamilyid();
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    View v=convertView;
    if(v==null){
        LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v=inflater.inflate(R.layout.family_list_view, null);

    }
    obj=getItem(position);
    id_text=(TextView) v.findViewById(R.id.list_familyid);
    id_text.setText(""+obj.getFamilyid());
    id_name=(TextView) v.findViewById(R.id.list_name);
    id_name.setText(""+obj.getHeadname());
    id_address=(TextView) v.findViewById(R.id.list_address);
    id_address.setText(""+obj.getAddress());
    id_check=(CheckBox) v.findViewById(R.id.check_familyview);

    id_check.setSelected(false);
    if(selectedlist.contains(""+getFamilyId(position))){

        id_check.setSelected(true);
    }


    id_check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            Log.i("zacharia", "inside on change");

            if(isChecked){
                selectedlist.add(""+getFamilyId(position));
            }
            else{
                selectedlist.remove(""+getFamilyId(position));
            }

        }
    });

    id_check.setTag(getFamilyId(position));
    if(selectedlist.contains(""+getFamilyId(position))){        
    id_check.setChecked(true);
    }
    else{
        id_check.setChecked(false);
    }

    return v;
}


}
}
公共类FamilyList扩展活动{
列表视图fam_列表;
数据适配器myadapt;
ArrayList家族成员名单;
ArrayList familyselectedlist;
按钮显示;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
Log.i(“撒迦利亚”,“内部创建”);
setContentView(R.layout.activity\u familylist);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT\u输入\u状态\u始终\u隐藏);
fam_list=(ListView)findViewById(R.id.familylist);
myadapt=新数据适配器(此);
final TextView empty=(TextView)findViewById(R.id.emptyView);
empty.setText(“未找到数据”);
FamilyAryList=myadapt.getfamilylist(“全部”);
familyselectedlist=新建ArrayList();
FamilyListAdapter familyadapter=新的FamilyListAdapter(此,R.layout.family_列表_视图,FamilyArray列表,familyselectedlist);
fam_list.setAdapter(familyadapter);
fam_list.setEmptyView(空);
ImageButton按钮=(ImageButton)findViewById(R.id.imageButton1);
setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
EditText edit=(EditText)findViewById(R.id.editText1);
if(edit.getText().length()>0){
如果(myadapt==null){
myadapt=新数据适配器(FamilyList.this);
}
FamilyAryList=myadapt.getfamilylist(edit.getText().toString());
fam_list.setAdapter(新的FamilyListAdapter(FamilyList.this,R.layout.family_list_视图,familyRayList,familyselectedlist));}
否则{
如果(myadapt==null){
myadapt=新数据适配器(FamilyList.this);
}
FamilyAryList=myadapt.getfamilylist(“全部”);
fam_list.setAdapter(新的FamilyListAdapter(FamilyList.this,R.layout.family_list_视图,familyArray列表,familyselectedlist));
}
fam_list.setEmptyView(空);
}
});
show=(按钮)findViewById(R.id.button1);
show.setOnClickListener(新的OnClickListener(){
公共void onClick(视图arg0){
对于(int i=0;i
public class FamilyList extends Activity{
ListView fam_list;
DataAdapter myadapt;
ArrayList<ListClass> familyarraylist;
ArrayList<String> familyselectedlist;
Button show;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
Log.i("zacharia", "inside oncreate");
setContentView(R.layout.activity_familylist);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
fam_list=(ListView) findViewById(R.id.familylist);
myadapt=new DataAdapter(this);
final TextView empty=(TextView) findViewById(R.id.emptyView);
empty.setText("No Data Found");
familyarraylist= myadapt.getfamilylist("All");
familyselectedlist=new ArrayList<String>();

FamilyListAdapter familyadapter=new FamilyListAdapter(this, R.layout.family_list_view,familyarraylist,familyselectedlist);
fam_list.setAdapter(familyadapter);
fam_list.setEmptyView(empty);




ImageButton button=(ImageButton) findViewById(R.id.imageButton1);
button.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {
        EditText edit=(EditText) findViewById(R.id.editText1);
        if(edit.getText().length()>0){
            if(myadapt==null){
            myadapt=new DataAdapter(FamilyList.this);
            }
            familyarraylist=myadapt.getfamilylist(edit.getText().toString());
            fam_list.setAdapter(new FamilyListAdapter(FamilyList.this, R.layout.family_list_view, familyarraylist,familyselectedlist));             }
        else{
            if(myadapt==null){
                myadapt=new DataAdapter(FamilyList.this);
                }
            familyarraylist=myadapt.getfamilylist("All");
            fam_list.setAdapter(new FamilyListAdapter(FamilyList.this, R.layout.family_list_view,familyarraylist,familyselectedlist));  
        }
        fam_list.setEmptyView(empty);

    }
});


show=(Button) findViewById(R.id.button1);
show.setOnClickListener(new OnClickListener() {

    public void onClick(View arg0) {
        for(int i=0;i<familyselectedlist.size();i++){
            Log.i("zacharia", familyselectedlist.get(i));
        }

        MainActivity.selected_list=true;
        MainActivity.selected_family_id_array=familyselectedlist;           
        FamilyList.this.finish();

    }
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
getMenuInflater().inflate(R.menu.activity_list, menu);
return true;
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
// TODO Auto-generated method stub
if(item.getItemId()==R.id.item1){
    final SharedPreferences prefs=getSharedPreferences("search_mode", 0);
    int pos=prefs.getInt("position", 0);
    new AlertDialog.Builder(this).setTitle("Search By")
            .setSingleChoiceItems(new String[]{"Name","House Name"}, pos, new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface dialog, int which) {
                    Editor edit=prefs.edit();
                    edit.putInt("position", which);
                    edit.commit();
                    dialog.dismiss();
                }
            }).show();
}
return true;
}

class FamilyListAdapter extends ArrayAdapter<ListClass>{

private ArrayList<ListClass> list_array;
Context context;
ArrayList<String> selectedlist;
TextView id_text,id_name,id_address;
CheckBox id_check;

boolean checkchange=false;
ListClass obj;
public FamilyListAdapter(Context context, int textViewResourceId,
        ArrayList<ListClass> objects,ArrayList<String> selectedlist) {
    super(context, textViewResourceId, objects);
    this.context=context;
    list_array=objects;
    this.selectedlist=selectedlist;
}

@Override
public ListClass getItem(int position) {
    // TODO Auto-generated method stub
    return list_array.get(position);
}

public int getFamilyId(int position){
    return list_array.get(position).getFamilyid();
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    View v=convertView;
    if(v==null){
        LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v=inflater.inflate(R.layout.family_list_view, null);

    }
    obj=getItem(position);
    id_text=(TextView) v.findViewById(R.id.list_familyid);
    id_text.setText(""+obj.getFamilyid());
    id_name=(TextView) v.findViewById(R.id.list_name);
    id_name.setText(""+obj.getHeadname());
    id_address=(TextView) v.findViewById(R.id.list_address);
    id_address.setText(""+obj.getAddress());
    id_check=(CheckBox) v.findViewById(R.id.check_familyview);

    id_check.setSelected(false);
    if(selectedlist.contains(""+getFamilyId(position))){

        id_check.setSelected(true);
    }


    id_check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            Log.i("zacharia", "inside on change");

            if(isChecked){
                selectedlist.add(""+getFamilyId(position));
            }
            else{
                selectedlist.remove(""+getFamilyId(position));
            }

        }
    });

    id_check.setTag(getFamilyId(position));
    if(selectedlist.contains(""+getFamilyId(position))){        
    id_check.setChecked(true);
    }
    else{
        id_check.setChecked(false);
    }

    return v;
}


}
}