Search code examples
androidswitchcompat

How to remove items from listview on switch on in android?


I have an app which contain listview with switch button, what i want when switch gets on i want to remove item from listview, I have tried a lot but cannot able to remove item .Please help.

code of adapter:-

private LayoutInflater layoutInflater;
private List<AppList> listStorage;
private Context mContext;
public AppAdapter(Context context, List<AppList> customizedListView) {
    layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    listStorage = customizedListView;
    this.mContext = context;
}

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

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

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

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

    ViewHolder listViewHolder;
    if (convertView == null) {
        listViewHolder = new ViewHolder();
        convertView = layoutInflater.inflate(R.layout.installed_app_list, parent, false);

        listViewHolder.textInListView = (TextView) convertView.findViewById(R.id.list_app_name);
        listViewHolder.imageInListView = (ImageView) convertView.findViewById(R.id.app_icon);
        listViewHolder.switchCompat = (SwitchCompat) convertView.findViewById(R.id.toggleButton);
        convertView.setTag(listViewHolder);
    } else {
        listViewHolder = (ViewHolder) convertView.getTag();
    }
    listViewHolder.textInListView.setText(listStorage.get(position).getName());
    listViewHolder.imageInListView.setImageDrawable(listStorage.get(position).getIcon());
    listViewHolder.switchCompat.setTag(position);

    listViewHolder.switchCompat.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
                listStorage.get(position).getPackName();
                //here i want to remove item from listview 
            } else {
                Toast.makeText(mContext, "Off", Toast.LENGTH_LONG).show();
            }
        }
    });
    return convertView;
}

static class ViewHolder {
    SwitchCompat switchCompat;
    TextView textInListView;
    ImageView imageInListView;
}

}


Solution

  • Remove element as mentioned below: Take a new List to add the removed element to new array, add them globally

    List<AppList> newarr = new ArrayList<AppList>();
    int newarr_pos = 0;
    

    Updated Code

    listViewHolder.switchCompat.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    // Add your element to new array
                    AppList model = datalist0.get(position);
                    newarr.add(newarr_pos,model); 
                    newarr_pos++;
                    //Then remove it from previous array
                    listStorage.remove(position);
                    notifyDataSetChanged();
                    //here i want to remove item from listview 
                } else {
                    Toast.makeText(mContext, "Off", Toast.LENGTH_LONG).show();
                }
            }
        });