简体   繁体   中英

Add ClickListener to RecyclerView realtime database

I need to add ClickListener to RecyclerView in my project but I couldn't.

I tried for days and failed:(

Help me, please.

(the variables are in Italian)

RecyclerView class:

public class ListaNonConsegnate extends AppCompatActivity{
    private androidx.recyclerview.widget.RecyclerView recyclerView;
    EditText searchBox;

    DatabaseReference nonConsegnate;
    private ArrayList<dati> list;

    private String nomeUtente;

    private SwipeRefreshLayout swipeRefreshLayout;                                                             

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

        Bundle extras = getIntent().getExtras();
        nomeUtente = extras.getString("KEY_nomeUtente");         //variable from the previous activity                                    

        searchBox = findViewById(R.id.searchBox);         //for filtered list

        nonConsegnate = FirebaseDatabase.getInstance().getReference().child(nomeUtente + "/00-b-Non consegnate");    //path on the database

        recyclerView = findViewById(R.id.recyclerView);                                                  
        recyclerView.setHasFixedSize(true);                                                              
        recyclerView.setLayoutManager(new LinearLayoutManager(this));                           

        searchBox.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

            @Override
            public void afterTextChanged(Editable s) {
                ArrayList<dati> myList = new ArrayList<>();

            //add filter

                AdapterClass adapterClass = new AdapterClass(myList);
                recyclerView.setAdapter(adapterClass);
            }
        });


    }

    @Override
    protected void onStart() {
        super.onStart();
        if (nonConsegnate != null) {
            nonConsegnate.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot snapshot) {
                    if (snapshot.exists()) {
                        list = new ArrayList<>();
                        for (DataSnapshot ds : snapshot.getChildren()) {

                            list.add(ds.getValue(dati.class));

                        }
                        AdapterClass adapterClass = new AdapterClass(list);
                        recyclerView.setAdapter(adapterClass);


                    }
                }

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

    } 
}  

Adapter class:

public class AdapterClass extends RecyclerView.Adapter<AdapterClass.MyViewHolder>{
    ArrayList<dati> list;           

    public AdapterClass(ArrayList<dati> list){
        this.list = list;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_items, viewGroup, false); 
        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        holder.bolla.setText(list.get(position).getDDT());                                           
    }

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


    public class MyViewHolder extends RecyclerView.ViewHolder{
        TextView bolla;
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            bolla = itemView.findViewById(R.id.textViewBolla);

        }

    } 
}

(OnClick will have to open a new activity by passing it the "nomeUtente" and "DDT" variables)

Thank you.

(StackOverflow tells me I need to add more details but there's nothing more to say so I write useless sentences) lol

1- Add this Code To Your Activity:

 public void onClickCalled() {
        // Your Code
    }

2- and this in your adapter:

 holder.nomeUtente.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ((YourNewActivity) context).onClickCalled();
            }
        });

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM