2016-05-31 73 views
1

`我刚接触android并构建一个列表,并且列表包含已安装的应用程序名称以及CheckBox以选择要卸载的应用程序名称。例如,问题是当列表变得比电话屏幕更长并且滚动被激活时;当我选择一个复选框时,会在列表底部自动选择第二个复选框。Android自定义列表视图中的自动复选框选择

问题是自动复选框选择复选框,PLZ帮助我。

public View getView(final int position, View convertView, ViewGroup parent) 
{ 

     LayoutInflater inflater = context.getLayoutInflater(); 

     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.ultimate, null); 
      holder = new ViewHolder(); 


      holder.apkName = (TextView) convertView.findViewById(R.id.appName); 
      holder.apkInstall=(TextView)convertView.findViewById(R.id.appMemory); 
      holder.cb=(CheckBox)convertView.findViewById(R.id.cb); 




      convertView.setTag(holder); 

     } else { 
      holder = (ViewHolder) convertView.getTag(); 


     } 


     PackageInfo packageInfo = (PackageInfo) getItem(position); 
     Drawable appIcon = packageManager.getApplicationIcon(packageInfo.applicationInfo); 
     String appName = packageManager.getApplicationLabel(packageInfo.applicationInfo).toString(); 
     appIcon.setBounds(0, 0, 50, 50); 
     holder.apkName.setCompoundDrawables(appIcon, null, null, null); 
     holder.apkName.setCompoundDrawablePadding(15); 
     holder.apkName.setText(appName); 


     holder.cb.setTag(position); 
+0

请张贴一些代码 – Nisarg

+0

holder.cb.setChecked(sba.get(位置));你为什么这样做? – Nisarg

回答

1

为此,您必须将您选中的复选框状态保存到模型类的ArrayList中。它会反映到您的适配器,然后进入列表视图。首先制作一个模型类像下面,

public class Model{ 
String name; 
int value; /* 0 -> checkbox disable, 1 -> checkbox enable */ 

Model(String name, int value){ 
this.name = name; 
this.value = value; 
} 
public String getName(){ 
return this.name; 
} 
public int getValue(){ 
return this.value; 
} 

} 

然后到你的适配器使你的代码看起来像这样,

public class CustomAdapter extends ArrayAdapter<Model>{ 
Model[] modelItems = null; 
Context context; 
public CustomAdapter(Context context, Model[] resource) { 
super(context,R.layout.row,resource); 
// TODO Auto-generated constructor stub 
this.context = context; 
this.modelItems = resource; 
} 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
// TODO Auto-generated method stub 
LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
convertView = inflater.inflate(R.layout.row, parent, false); 
TextView name = (TextView) convertView.findViewById(R.id.textView1); 
CheckBox cb = (CheckBox) convertView.findViewById(R.id.checkBox1); 
name.setText(modelItems[position].getName()); 
if(modelItems[position].getValue() == 1) 
cb.setChecked(true); 
else 
cb.setChecked(false); 
return convertView; 
} 
} 
从活动

现在只要通过你的复选框列表插入适配器象下面这样:

lv = (ListView) findViewById(R.id.listView1); 
modelItems = new Model[5]; 
modelItems[0] = new Model("pizza", 0); 
modelItems[1] = new Model("burger", 1); 
modelItems[2] = new Model("olives", 1); 
modelItems[3] = new Model("orange", 0); 
modelItems[4] = new Model("tomato", 1); 
CustomAdapter adapter = new CustomAdapter(this, modelItems); 
lv.setAdapter(adapter); 

现在,如果用户将选中/取消选中任何复选框,只需更改其模型类中的值并通知适配器即可。

0

当您每次需要显示列表视图项目时滚动列表视图时,它将调用getView来创建或获取布局。因此,您需要检查模型类中是否使用布尔变量进行检查,并根据boolan值将复选框视为选中状态。您应该在用户选中复选框时更新模型的布尔值。

您的模型类应该包含一个变量,表示复选框是否被选中。

public class Model{ 
    ..... 
    boolean isChecked; //true if checkbox is checked 
    ..... 
} 

在您的适配器类中,在getView()中。 您应该使用isChecked变量检查它是否被选中。

if(isChecked){ 
    holder.cb.setChecked(true); 
} else { 
    holder.cb.setChecked(false); 
} 
相关问题