0

I want to select many item in recyclerview

I have data retrieve it from firebase database to recyclerview then i want select many item from recycler view to update it

in youtube there is some ways for local data I couldn't did it for my database

how can I did it ?

this code just retrieve data from database to recyclerView what should I add to select many item?

MainActivity

private RecyclerView rv_worker;
private FirebaseDatabase db;
private ArrayList <WorkerModel> list;
private Worker_Add_money_Adapter worker_add_money_adapter;

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

    rv_worker = findViewById(R.id.RV);
    db = FirebaseDatabase.getInstance();
    rv_worker.setHasFixedSize(true);
    rv_worker.setLayoutManager(new LinearLayoutManager(this));
    
    getList();

}

private void  getList()
{
    db.getReference("Employees").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {

            list=new ArrayList <>();
            worker_add_money_adapter = new Worker_Add_money_Adapter(Worker_add_money.this,list
                    , Worker_add_money.this);

            rv_worker.setAdapter(worker_add_money_adapter);
            for (DataSnapshot child :snapshot.getChildren())
            {
                WorkerModel workerModel =child.getValue(WorkerModel.class);
                list.add(workerModel);
                worker_add_money_adapter.notifyItemInserted(list.size()-1);
                worker_add_money_adapter.getItemCount();
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {
            Toast.makeText(Worker_add_money.this, error.getMessage(), Toast.LENGTH_SHORT).show();
        }
    });
}

@Override
public void onItemClick(final int position) {

}

Adapter

public class Worker_Add_money_Adapter extends RecyclerView.Adapter <Worker_Add_money_Adapter.ViewHolder>  {

private Context context;
private List <WorkerModel> list;
private RecyclerView_InterFace recyclerView_interFace;

public Worker_Add_money_Adapter(Context context, List <WorkerModel> list, RecyclerView_InterFace recyclerView_interFace) {
    this.context = context;
    this.list = list;
    this.recyclerView_interFace = recyclerView_interFace;
}

@NonNull
@Override
public Worker_Add_money_Adapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    return new Worker_Add_money_Adapter.ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.card_worker_add_money, parent, false));

}

@Override
public void onBindViewHolder(@NonNull Worker_Add_money_Adapter.ViewHolder holder, final int position) {

    final WorkerModel workerModel = list.get(position);
    holder.tv_name.setText(workerModel.getName());

}

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

public class ViewHolder extends RecyclerView.ViewHolder {

    private TextView tv_name;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);

        tv_name = itemView.findViewById(R.id.tx_name);
        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                recyclerView_interFace.onItemClick(getAdapterPosition());
            }
        });
    }
}

}

  • I think this article might help, [How to delete multiple records from Firestore using RecyclerView multi-selection?](https://medium.com/firebase-tips-tricks/how-to-delete-multiple-records-from-firestore-using-recyclerview-multi-selection-96108e4c6166). It's for Cloud Firestore but you can apply the same mechanism for multi-selection in the case of the Firebase Realtime Database. – Alex Mamo Feb 17 '21 at 04:20

1 Answers1

0

This requirement you asked for need to be divided into 3 parts

  1. Getting data from firebase and setting that list to Recycler view

    I guess you have done this step successfully

  2. Making recycler view to select multiple tiles

    Follow this link for achieving this

  3. Get all selected items in a list

    • Declare this globally in your adapter class

       List<YourDataModel> list = new ArrayList<YourDataModel>();
      
    • Implement onClick or OnTap to recycler view tile

       recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getApplicationContext(), recyclerView, new RecyclerTouchListener.ClickListener() {
        @Override
        public void onClick(View view, int position) {
      
        }
      
        @Override
        public void onLongClick(View view, int position) {
           list.add(yourDataList.get[position]);
        }
      

      }));

    • Now list will contain the data of all selected items

  • Hope this solution works out for you. If it doesn't matches to your requirement check out some libraries for multiple items select. If you still facing some problems or doubts you can reach out to me here – Sharath V Bhargav Feb 17 '21 at 04:38
  • I added button and edittext i want take text or number from editext and add for all items i selected in database – taha aaass Feb 18 '21 at 02:19
  • This is simple on button click it will invoke onClick method in View holder class. ViewHolder respond to currently touched item based on position number. You can store position and corresponding value in a model class and add it to a list of model – Sharath V Bhargav Feb 18 '21 at 05:17
  • can give me code this will help me too much thx – taha aaass Feb 18 '21 at 08:06
  • Check out this link for referencing your requirement https://stackoverflow.com/questions/31844373/saving-edittext-content-in-recyclerview – Sharath V Bhargav Feb 22 '21 at 04:52