簡體   English   中英

將 ClickListener 添加到 RecyclerView 實時數據庫

[英]Add ClickListener to RecyclerView realtime database

我需要在我的項目中將ClickListener添加到RecyclerView但我不能。

我嘗試了幾天,但失敗了:(

請幫幫我。

(變量是意大利語)

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();
                }
            });
        }

    } 
}  

適配器 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 必須通過傳遞“nomeUtente”和“DDT”變量來打開一個新活動)

謝謝你。

(StackOverflow 告訴我需要添加更多細節,但沒有什么可說的,所以我寫了無用的句子)哈哈

1-將此代碼添加到您的活動中:

 public void onClickCalled() {
        // Your Code
    }

2-這在你的適配器中:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM