当前位置: 首页 > 知识库问答 >
问题:

回收站查看项目背景更改项目点击

乌翔
2023-03-14

在这里我有项目的列表在回收器视图这是取自Firebase.所以我试图改变其背景颜色当用户点击它.但是当我点击项目1然后项目4背景颜色也得到改变.如果点击项目2然后项目8颜色也.它给不恰当的结果。

    firebaseTimeadapter = new FirebaseRecyclerAdapter<TimeSlot, FirebaseTimeViewHolder>(
            TimeSlot.class,
            R.layout.time_slot_layout,
            FirebaseTimeViewHolder.class,
            timeSlot.child(Common.BikeId)) {
        //variable to hold selected Item position
        private int mSelectedItemPosition = -1;



        @Override
        protected void populateViewHolder(final FirebaseTimeViewHolder firebaseTimeViewHolder, TimeSlot slot, final int i) {
            firebaseTimeViewHolder.time_slot.setText(slot.getTime_slot());
            firebaseTimeViewHolder.txt_time_slot_description.setText(ConvertToAvailableorNotAvailable(slot.isAvailable()));
            firebaseTimeViewHolder.setItemClickListener(new ItemClickListener() {

                @Override
                public void onClick(View view, int position, boolean isLongClick) {

                    firebaseTimeViewHolder.card_view_slot.setCardBackgroundColor(getResources().getColor(android.R.color.darker_gray));

                    firebaseTimeViewHolder.card_view_slot.setClickable(false);

                    firebaseTimeViewHolder.time_slot.setTextColor(getResources()
                            .getColor(android.R.color.white));
                    firebaseTimeViewHolder.txt_time_slot_description.setTextColor(getResources().getColor(android.R.color.white));


                      //  firebaseTimeViewHolder.card_view_slot.setCardBackgroundColor(getResources().getColor(android.R.color.darker_gray));
                        date = new SimpleDateFormat("dd-MMM").format(new Date());
                        txt_from_date.setText(date + " " + slot.getTime_slot());
                    //    Toast.makeText(BookingCalender.this, "Clicked" + slot.getTime_slot(), Toast.LENGTH_SHORT).show();


                }
            });

        }
    };
    recycler_time_list.setAdapter(firebaseTimeadapter);

视图持有者类

public class FirebaseTimeViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

public TextView time_slot,txt_time_slot_description;
public CardView card_view_slot;

private ItemClickListener itemClickListener;




public FirebaseTimeViewHolder(View itemView) {
    super(itemView);

    time_slot=(TextView)itemView.findViewById(R.id.time_slot);
    txt_time_slot_description=(TextView)itemView.findViewById(R.id.txt_time_slot_description);
    card_view_slot=(CardView)itemView.findViewById(R.id.card_time_slot);
    itemView.setOnClickListener(this);

}

public void setItemClickListener(ItemClickListener itemClickListener){
    this.itemClickListener=itemClickListener;
}

@Override
public void onClick(View v) {

    itemClickListener.onClick(v,getAdapterPosition(),false);

}

}

共有1个答案

裴鸿熙
2023-03-14

删除这个无意义的部分,只需使用itemView即可。setOnClickListener()

private ItemClickListener itemClickListener;
public void setItemClickListener(ItemClickListener itemClickListener){
    this.itemClickListener = itemClickListener;
}

这部分也很奇怪;在最好的情况下,它会导致一个无休止的循环:

itemClickListener.onClick(v, getAdapterPosition(), false);

这至少可以解决由于将所有项设置为同一个侦听器而导致的异常行为。。。

而我认为你可能正在寻找类似于androidx的东西。回收视图。选择:

implementation "androidx.recyclerview:recyclerview:1.1.0"
implementation "androidx.recyclerview:recyclerview-selection:1.0.0"

请参见“步骤5:突出显示所选项目”下面的回收器视图选择指南。

然而,通过数据绑定可以更好地保持选择

 类似资料:
  • 我正在从事一个自由职业者的android项目。我有一个问题,就是根据项目设计需要改变RecyclerView项目之间的利润率。我想显示屏幕上最后一个可见项目的一半,这样用户就可以猜测水平滚动。我尝试创建一个自定义的RecyclerView.itemEdition。当屏幕第一次打开时,一切正常,但当我开始在这个回收视图上水平滚动时,项目之间的间隔增加了,有时甚至减少了。我如何用一般方法解决这个问题。

  • 我想改变Long Press上Card View的背景,我访问了这么多论坛,但没有人给出正确的答案。 那么,如何改变列表/卡片/回收器视图的背景,就像长按导航视图项目一样??

  • 我有一个清单,我在回收商的视图中展示了这一点 一些项目有蓝色背景和其他项目有灰色背景 我想编辑所选项目背景(所选项目表示已单击的项目) 这是我的适配器类

  • 当我在回收器视图中选择一个项目时,会自动选择多个项目 我正在做的是 我只想获取没有重复的联系人,并在recyclerview中列出所有联系人,并使两个文本视图可见(一个用于数字,第二个用于名称)。完成了,但问题是 当我点击一个项目时,它会被点击4次(例如,如果我点击一个项目,它会显示两个文本视图,但具有相同名称和编号的相同项目会显示出来,就像我点击了4个项目并看到图片一样) 适配器类 在那里我得到

  • 我想展开/折叠我的recyclerView项目,以显示更多信息。我想实现与SlideExpandableListView相同的效果。 基本上,在我的viewHolder中,我有一个不可见的视图,我想做一个平滑的展开/折叠动画,而不是将可见性设置为仅可见/消失。我一次只需要扩展一个项目,如果有一些提升来显示该项目已被选中,那就太酷了。 这与新的Android最近通话历史记录列表的效果相同。“回调”和

  • FolderListAdapter代码 RecyclerView的Mainactive代码 回收器视图的XML代码 folderList的大小为2 我还检查了适配器的大小。它也是2,我不知道我在哪里犯了错误,为什么它现在在活动中什么都没有显示