My goal is to display a list of installed applications in a custom listview (inside an Activity) without unchecking the box (when scrolling through the list).
Problem . When scrolling through the list, the checkbox of the checkbox is unchecked.
My progress so far : While this blog post clearly shows how to get rid of the problem with checkboxes in the list that are not checked, the difference is that it uses the model as a custom class whereas in my case it is a system class [ those. packageList1 = packageManager.getInstalledPackages (0);]
How can i solve this? Below is my code attempt. I can successfully display applications in listviw using checkboxes so that the checked status is not checked when scrolling through the list.
I HAVE OPENED TO ANY METHOD FOR AN ANSWER THAT MAY PROVIDE ME TO SHOW THE LIST OF INSTALLED APPLICATIONS IN LISTVIEW WITHOUT A CHECKED CHECK STATUS
My custom Listadapter class:
public class Listadapter extends BaseAdapter {
private static String TAG = "focus";
List<PackageInfo> packageList;
Activity context;
PackageManager packageManager;
boolean[] itemChecked;
List<String> appNamestoBlock_local;
public Listadapter(Activity context, List<PackageInfo> packageList,
PackageManager packageManager, List<String> appNamestoBlock) {
super();
this.context = context;
this.packageList = packageList;
this.packageManager = packageManager;
this.appNamestoBlock_local = appNamestoBlock;
itemChecked = new boolean[packageList.size()];
}
private String getSerializedBlockedAppNames() {
String serializedBlockedAppNames;
Log.v(TAG,
"-------- List<String> list = "
+ TextUtils.join(",", appNamestoBlock_local));
serializedBlockedAppNames = TextUtils.join(",", appNamestoBlock_local);
return serializedBlockedAppNames;
}
private class ViewHolder {
TextView apkName;
CheckBox ck1;
}
public int getCount() {
return packageList.size();
}
public Object getItem(int position) {
return packageList.get(position);
}
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
LayoutInflater inflater = context.getLayoutInflater();
if (convertView == null) {
convertView = inflater.inflate(R.layout.list_item, null);
holder = new ViewHolder();
holder.apkName = (TextView) convertView
.findViewById(R.id.textView1);
holder.ck1 = (CheckBox) convertView.findViewById(R.id.checkBox1);
holder.ck1.setFocusable(false);
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, 40, 40);
holder.apkName.setCompoundDrawables(appIcon, null, null, null);
holder.apkName.setCompoundDrawablePadding(15);
holder.apkName.setText(appName);
holder.ck1.setChecked(false);
if (itemChecked[position])
holder.ck1.setChecked(true);
else
holder.ck1.setChecked(false);
if (getSerializedBlockedAppNames().contains(appName)) {
Log.v(TAG + " ListAdapter",
"-------- YES, appName is in getSerializedBlockedAppNames(), appName = "
+ appName);
holder.ck1.setChecked(true);
}
holder.ck1.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (isChecked) {
itemChecked[position] = true;
} else {
itemChecked[position] = false;
}
}
});
return convertView;
}
}
In onCreate, the function of my main action is:
PackageManager packageManager = getPackageManager();
List<PackageInfo> packageList1 = packageManager.getInstalledPackages(0);
Listadapter Adapter = new Listadapter(MainActivityCircularSeekbar.this, packageList1, packageManager, blockedApps);