【问题标题】:getRef(position).getKey() in RecyclerView.AdapterRecyclerView.Adapter 中的 getRef(position).getKey()
【发布时间】:2023-03-26 15:28:02
【问题描述】:

在 FirebaseRecyclerAdapter 中,我可以使用 getRef(position).getKey(),但我使用的是 RecyclerView.Adapter,并且我想在用户单击复选框时获取密钥。这是我在 onBindViewHolder() 中的代码:

    @Override
public void onBindViewHolder(@NonNull UsersViewHolders holder, final int position) {
    holder.setName(mUserNameList.get(position));
    holder.setDesc(mUserDescList.get(position));
    holder.setImage(mUserPicList.get(position));
    holder.mCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

            //TODO: get the key

        }
    });
}

是否可以在 RecyclerView.Adapter 中获取密钥?

【问题讨论】:

    标签: java android


    【解决方案1】:

    我设法通过重构我的代码解决了我自己的问题。

    1.在适配器类中,我为itemClickListener创建了一个接口

    public interface RecyclerViewItemClick {
    
        public void OnItemClickListener(UsersViewHolders holder, int position);
    
    }
    

    并创建一个全局

    private RecyclerViewItemClick mListener;
    

    将其添加到构造函数

    public MessageListAdapter(RecyclerViewItemClick listener) {
        this.mListener = listener;
    }
    

    2。在 onBindViewHolder() 我传递了持有者和位置

    @Override
    public void onBindViewHolder(@NonNull final UsersViewHolders holder, final int position) {
        holder.itemView.setOnClickListener(new View.OnClickListener() {
    
            @Override
            public void onClick(View v) {
    
                mListener.OnItemClickListener(holder, position);
    
            }
    
        });
    }
    

    3.在您的活动中,添加此代码。为 ArrayList 声明一个全局变量来存储键并将 addListenerForSingleValueEvent 调用到您的 DatabaseReference

    //mUserDatabase is a DatabaseReference
    mUserDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
    
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot datas : dataSnapshot.getChildren()) {
                    String uid = datas.getKey();
    
                    //mUserKey is an ArrayList<String>
                    mUserKey.add(uid);
    
                    }
                }
            }
    
            @Override
            public void onCancelled(DatabaseError databaseError) {
    
            }
        });
    

    4.现在添加它以获取每个位置的密钥

    mAdapter = new MyAdapter(new MyAdapter.RecyclerViewItemClick() {
    
            @Override
            public void OnItemClickListener(PickMemberAdapter.UsersViewHolders holder, int position) {
    
                String userKey = mUserKey.get(position);
    
                if (!holder.mCheckBox.isChecked()) {
                    holder.mCheckBox.setChecked(true);
    
                    Toast.makeText(MainActivity.this, userKey, Toast.LENGTH_LONG).show();
                } else {
                    holder.mCheckBox.setChecked(false);
                    Toast.makeText(MainActivity.this, userKey, Toast.LENGTH_LONG).show();
                }
    
            }
    
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多