2016-05-31 5 views
1

`Я новичок в android и строю список, и список содержит имя установленного приложения с CheckBox, чтобы выбрать, какой из них нужно удалить. например, проблема в том, что когда список стал длиннее экрана телефона, и прокрутка активна; когда я выбираю флажок, второй выбирается в нижней части списка.Автоматический выбор флажка в пользовательском списке андроида

Проблема заключается в автоматической установке флажков флажков, 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 (position)); почему вы это сделали? – 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); 
}