how to confirm selected items in recyclerview item list and make selected on layout

Viewed 82

i am preparing textview seat numbers list by using recyclerview grid layout manager. i can select the multiple items in the recyclerview list by red color. now i want to keep this seat item selected as red color when on cliking on confirm seat button. when i reopen the recyclerview list it should show the seat selected red color and other seat item in normal color. confirm seat button clickconfrim seat button click SelectionAdapter

    '''


     public class SelectionAdapter extends RecyclerView.Adapter<SelectionAdapter.MygridViewHolder> {

            private Context applicationContext;
            private ArrayList<Seatnos> list, selected;

            public SelectionAdapter(Context applicationContext, ArrayList<Seatnos> list) {
                this.applicationContext = applicationContext;
                this.list = list;
                this.selected = new ArrayList<>();
            }


        @NonNull
        @Override
        public MygridViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater layoutInflater=LayoutInflater.from(parent.getContext());
        View view=layoutInflater.inflate(R.layout.list_layout_selection,parent,false);
        return new MygridViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull final MygridViewHolder holder, final int position) {
         final Seatnos seatnos = list.get(position);

          holder.textView.setText(String.valueOf(position));
           holder.textView.setText(seatnos.getTextno());



        holder.textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (selected.contains(seatnos)) {
                    selected.remove(seatnos);
                    unhighlightView(holder);
                } else {
                    selected.add(seatnos);
                    highlightView(holder);
                }
            }
        });


        if (selected.contains(seatnos))
            highlightView(holder);
        else
            unhighlightView(holder);
    }




    private void highlightView(MygridViewHolder holder) {
        holder.itemView.setBackgroundColor(ContextCompat.getColor(applicationContext, R.color.red));
    }

    private void unhighlightView(MygridViewHolder holder) {
        holder.itemView.setBackgroundColor(ContextCompat.getColor(applicationContext, android.R.color.transparent));
    }


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

    class  MygridViewHolder extends RecyclerView.ViewHolder {
        TextView textView;


        MygridViewHolder(@NonNull View itemView) {
            super(itemView);


            textView = (TextView) itemView.findViewById(R.id.textViewsA);

        }
    }



        public void addAll(ArrayList<Seatnos> list) {
            clearAll(false);
            this.list = list;
            notifyDataSetChanged();

        }

        public void clearAll(boolean isNotify) {
            list.clear();
            selected.clear();
            if (isNotify) notifyDataSetChanged();
        }

        public void clearSelected() {
            selected.clear();
            notifyDataSetChanged();
        }

        public void selectAll() {

            selected.clear();
            selected.addAll(list);
            notifyDataSetChanged();
        }

        public ArrayList<Seatnos> getSelected() {

            return selected;

    }
}
'''

SeatSelectionactivity.java

'''   
public class SeatSelectionActivity extends AppCompatActivity {

    RecyclerView recyclerView;
    Activity activity = SeatSelectionActivity.this;
    Button btnGetSelected,btnreset;
    FirebaseDatabase database;
    DatabaseReference ref;
    SelectionAdapter selectionAdapter;
    ArrayList<Seatnos> list;
    Update update;
    ChildEventListener mChildListner;
    ValueEventListener mValueEventListner;


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

       btnGetSelected = (Button) findViewById(R.id.btconfirm);

        recyclerView=(RecyclerView) findViewById(R.id.viewseat);

        list = new ArrayList<>();

        String uid = getIntent().getStringExtra(UpdateAdapter.USER_KEY);

        DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("updates").child(uid);



        selectionAdapter=new SelectionAdapter(this, list);
        RecyclerView.LayoutManager layoutManager=new GridLayoutManager(this,4);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setItemAnimator(new DefaultItemAnimator());


        mValueEventListner = new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                Update update =dataSnapshot.getValue(Update.class);

                update.setUid(dataSnapshot.getKey());
                int seat= Integer.parseInt(update.getSeat());
                ArrayList<String> array = new ArrayList<String>(seat);

                for(long i=0; i<seat; i++) {
                    array.add(String.valueOf(i));
                    Seatnos seatnos = new Seatnos();
                    seatnos.setTextno(""+(i+1));
                    if(i==0){
                        seatnos.setChecked(true);
                    }



                    list.add(seatnos);
                }


                recyclerView.setAdapter(selectionAdapter);

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        };
        databaseReference.addValueEventListener(mValueEventListner);



    }





    public void reset(View view) {

    }

   public void bookconfirm(View view) {


       if (selectionAdapter.getSelected().size() > 0) {
           //ArrayList<Integer> mlist = new ArrayList<>();
           StringBuilder stringBuilder = new StringBuilder();
           for (int i = 0; i < selectionAdapter.getSelected().size(); i++) {

               stringBuilder.append(selectionAdapter.getSelected().get(i).getTextno());




              stringBuilder.append("\n");

           }


           Toast.makeText(activity, String.format("Selected %d items", selectionAdapter.getSelected().size()), Toast.LENGTH_SHORT).show();


           showToast(stringBuilder.toString().trim());

       } else {
           showToast("No Selection");
       }




   };

    public void selectAll(View v) {
        selectionAdapter.selectAll();
    }

    public void deselectAll(View v) {
        selectionAdapter.clearSelected();
    }

    public void doAction(View v) {
        Toast.makeText(activity, String.format("Selected %d items", selectionAdapter.getSelected().size()), Toast.LENGTH_SHORT).show();
    }


private void showToast(String msg) {
        Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
        }
        }
'''

model class

'''

public class Seatnos implements Serializable {
    String textno;
    String sid;

     private boolean isChecked = false;

    public Seatnos() {

    }

    public boolean isChecked() {
            return isChecked;
        }

        public void setChecked(boolean checked) {
            isChecked = checked;
        }

    public String getSid() {
        return sid;
    }

    public void setSid(String sid) {
        this.sid = sid;
    }

    public Seatnos(String textno) {
        this.textno = textno;
    }

    public String getTextno() {
        return textno;
    }

    public void setTextno(String textno) {
        this.textno = textno;
    }
}
'''
1 Answers

You would use shared preferences to save the state of the selected item:

Do this in onBindViewHolder:

@Override
public void onBindViewHolder(@NonNull final MygridViewHolder holder, final int position) {
final Seatnos seatnos = list.get(position);

holder.textView.setText(String.valueOf(position));
holder.textView.setText(seatnos.getTextno());


//read from preferences

SharedPreferences pref = getSharedPreferences("item", MODE_PRIVATE); 
String state = pref.getString(String.valueOf(position)+"state", "default");

if(state.equals("selected")){

//selected
highlightView(holder);

}else{
//not selected
unhighlightView(holder);
}


//on click

holder.textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (selected.contains(seatnos)) {
selected.remove(seatnos);
unhighlightView(holder);

//save state
SharedPreferences.Editor editor = getSharedPreferences("item", MODE_PRIVATE).edit();
editor.putString(String.valueOf(position)+"state", "not_selected");
editor.apply();

} else {

selected.add(seatnos);
highlightView(holder);

//save state
SharedPreferences.Editor editor = getSharedPreferences("item", MODE_PRIVATE).edit();
editor.putString(String.valueOf(position)+"state", "selected");
editor.apply();


}
}
});

......................
......................
......................


}

UPDATE:

Yes you should use the context passed to your adapter to access the shared prederences:

This:

getSharedPreferences("item", MODE_PRIVATE);

Becomes:

applicationContext.getSharedPreferences("item", MODE_PRIVATE);

This:

getSharedPreferences("item", MODE_PRIVATE).edit();

Becomes:

applicationContext.getSharedPreferences("item", MODE_PRIVATE).edit();
Related