为什么我只能正确获得第一个和最后一个适配器位置的数据库ID?

问题描述 投票:0回答:1

我已经从HomeFragment卡中设置了意图,请单击以重定向到“第二活动”。另外,我正在从recyclerView适配器发送当前位置的数据库ID。

但是在第二活动中,仅正确接收了第一项和最后一项ID。如果我单击第3个职位项目,则其他职位的ID将发送到Second Activity。

这是我的代码:

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

    Context context;
    List<HomeModel> homeModelList;
    DatabaseReference databaseReference;
    List<String> keysList;

    String keyID;

    public HomeAdapter(Context context, List<HomeModel> homeModelList) {
        this.context = context;
        this.homeModelList = homeModelList;
    }


    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        View v = LayoutInflater.from(context).inflate(R.layout.layout_news, parent, false);
        return new ViewHolder(v);
    }

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

        final HomeModel homeModel = homeModelList.get(position);
        holder.timesAgo.setText(homeModel.getTimesAgo().trim());
        holder.newsTitleTextView.setText(homeModel.getNewsTitle().trim());
        holder.newsDetailTextView.setText(homeModel.getNewsDetail().trim());

        Log.e("View counts ", String.valueOf(homeModel.getViewCounts()));

        holder.view_counter.setText(String.valueOf(homeModel.getViewCounts()));


        Glide.with(context).load(homeModel.getNewsImage()).centerCrop().into(holder.newsThumbnailImageView);//set error and placeholder


        databaseReference = FirebaseDatabase.getInstance().getReference("News");
//        final String z = databaseReference.child(String.valueOf(homeModelList.get(position))).getKey();

//        Toast.makeText(context, z, Toast.LENGTH_SHORT).show();
        keysList = new ArrayList<>();
        databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
                    Log.e("Position is ", String.valueOf(childSnapshot.getKey()));
                    keysList.add(childSnapshot.getKey());
                }
            }

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

            }
        });

        holder.cardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String pos = keysList.get(holder.getAdapterPosition());
                Log.e("current Position is", pos);
                Toast.makeText(context, keysList.get(position), Toast.LENGTH_SHORT).show();
                Intent intent = new Intent(context, DetailNews.class);
                intent.putExtra("currentPosition", pos);
                context.startActivity(intent);
            }
        });

如何解决此问题?请引导我。

android firebase-realtime-database android-recyclerview recycler-adapter
1个回答
0
投票

更改以下代码:

 databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
                    Log.e("Position is ", String.valueOf(childSnapshot.getKey()));
                    keysList.add(childSnapshot.getKey());
                }
            holder.cardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String pos = keysList.get(holder.getAdapterPosition());
                Log.e("current Position is", pos);
                Toast.makeText(context, keysList.get(position), 
            Toast.LENGTH_SHORT).show();
                Intent intent = new Intent(context, DetailNews.class);
                intent.putExtra("currentPosition", pos);
                context.startActivity(intent);
            }
        });
            }

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

            }
        });
© www.soinside.com 2019 - 2024. All rights reserved.