How to show a list of installed applications in a list without a flag that is not checked when scrolling through the list?

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);

    // Log.v(TAG,
    // "-------- checking in getView() in ListAdapter if appName is in getSerializedBlockedAppNames()");
    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);
0
source share
1 answer

Activities

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.pm.PackageInfo;
import android.os.Bundle;
import android.widget.ListView;

public class AppScreen extends Activity {
private ListView list;
ArrayList<Datamodel> res;
MyAdapter _adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.app_screen);

    list = (ListView) findViewById(R.id.list);
    List<PackageInfo> _myapps = getPackageManager().getInstalledPackages(0);
    res = new ArrayList<Datamodel>();
    for (int i = 0; i < _myapps.size(); i++) {
        PackageInfo p = _myapps.get(i);

        Datamodel _model  = new Datamodel();
        _model.setAppname(p.applicationInfo.loadLabel(getPackageManager()).toString());
        res.add(_model);
        System.out.println("ajajajja" + res.size() + res.get(i).getAppname());
    }
    _adapter = new MyAdapter(getApplicationContext(), res);
    _adapter.notifyDataSetChanged();
    list.setAdapter(_adapter);


}

}

Datamodel class

public class Datamodel {

public String appname = "";
private boolean selected;

public String getAppname() {
    return appname;
}

public void setAppname(String appname) {
    this.appname = appname;
}

public boolean isSelected() {
    return selected;
}

public void setSelected(boolean isChecked) {
    this.selected = isChecked;
}

}

Adapter class

public class MyAdapter extends BaseAdapter {
Context _ctx;
LayoutInflater inflater;
public ArrayList<Datamodel> data;

public MyAdapter(Context c, ArrayList<Datamodel> _arraylist) {
    this._ctx = c;
    this.data = _arraylist;
}

@Override
public int getCount() {
    return data.size();
}

@Override
public Object getItem(int position) {
    return position;
}

@Override
public long getItemId(int position) {
    return 0;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    inflater = (LayoutInflater) _ctx.getApplicationContext()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View itemView = inflater.inflate(R.layout.inflator, parent, false);
    final CheckBox checks = (CheckBox) itemView.findViewById(R.id.b);
    final TextView _setappname = (TextView) itemView.findViewById(R.id.a);
    checks.setChecked(data.get(position).isSelected());

    Datamodel obj = data.get(position);
    _setappname.setText(obj.getAppname());
    checks.setTag(position);

    checks.setOnCheckedChangeListener(new OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {                    
            int getPosition = (Integer) buttonView.getTag();
            Datamodel _obj = data.get(getPosition);
            data.get(position).setSelected(isChecked);
            String ss = _obj.getAppname();
            System.out.println("pos is" + getPosition);

        }
    });

    return itemView;
}

}

XML action

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.installedapps.AppScreen" >

<ListView 
    android:id="@+id/list"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent">

</ListView>

Xml inflator

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="60dp"
android:gravity="center"
android:layout_gravity="center"
android:orientation="horizontal"
android:weightSum="2" >

<TextView
    android:id="@+id/a"
    android:layout_width="0dp"
    android:layout_height="fill_parent"
    android:textColor="#000"
    android:layout_gravity="center"
    android:gravity="center"
    android:layout_weight="1.7" />

<CheckBox
    android:id="@+id/b"
    android:layout_width="0dp"
     android:layout_gravity="center"
    android:gravity="center"
    android:layout_weight="0.3"
    android:layout_height="wrap_content" />

</LinearLayout>
+13
source

Source: https://habr.com/ru/post/1544115/


All Articles