Использование SparseBooleanArray для сохранения состояния флажка в RecyclerView при прокрутке - PullRequest
0 голосов
/ 14 февраля 2019

Так что я некоторое время пытался заставить это работать, но я не могу понять, где я иду не так.Я пытаюсь использовать SparseBooleanArray для хранения state из checkboxes при прокрутке;вместо их удаления.

Я использовал метод 3 в этом учебном пособии

Ниже мой Адаптер , где я пытаюсь реализовать код...

import android.support.v7.widget.RecyclerView;
import android.util.SparseBooleanArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.TextView;

import java.util.List;

public class CharsAdapter extends RecyclerView.Adapter<CharsAdapter.MyViewHolder> {
    private SparseBooleanArray itemStateArray= new SparseBooleanArray();

    private List<StarList> starlList;

    public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
        public TextView chname, stname;
        public CheckBox recchar;

        public MyViewHolder(View view) {
            super(view);
            chname = (TextView) view.findViewById(R.id.chname);
            stname = (TextView) view.findViewById(R.id.stname);
            recchar = (CheckBox) view.findViewById(R.id.recchar);

            view.setOnClickListener(this);
        }

        void bind(int position) {
            // use the sparse boolean array to check
            if (!itemStateArray.get(position, false)) {
                recchar.setChecked(false);}
            else {
                recchar.setChecked(true);
            }
        }

        @Override
        public void onClick(View v) {
            int adapterPosition = getAdapterPosition();
            if (!itemStateArray.get(adapterPosition, false)) {
                recchar.setChecked(true);
                itemStateArray.put(adapterPosition, true);
            }
            else  {
                recchar.setChecked(false);
                itemStateArray.put(adapterPosition, false);
            }
        }
    }


    public CharsAdapter(List<StarList> starlList) {
        this.starlList = starlList;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.char_list_row, parent, false);

        return new MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        holder.bind(position);
        StarList starlist = starlList.get(position);
        holder.chname.setText(starlist.getChname());
        holder.stname.setText(starlist.getStname());
    }

    @Override
    public int getItemCount() {
        return starlList.size();
    }


}

Любая помощь вообще была бы потрясающей!

...