Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android(java)-适配器onClickListener方法始终返回最后一项_Java_Android_Android Recyclerview_Onclick - Fatal编程技术网

Android(java)-适配器onClickListener方法始终返回最后一项

Android(java)-适配器onClickListener方法始终返回最后一项,java,android,android-recyclerview,onclick,Java,Android,Android Recyclerview,Onclick,我需要在适配器中获取当前项的ID,但它只返回最后添加项的ID。 我想不出怎么避开这件事 @Override protected void onBindViewHolder(ViewHolder holder, final int position, CardViewModel cardViewModel) { button.setOnClickListener(new View.OnClickListener() {

我需要在适配器中获取当前项的ID,但它只返回最后添加项的ID。 我想不出怎么避开这件事

            @Override
            protected void onBindViewHolder(ViewHolder holder, final int position, CardViewModel cardViewModel) {

   button.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Log.d("id: ",cardViewModel.getId());
                    }
                });

            }
按顺序单击第一、第二和第三项并输出:

3 3 3

必须是:

1 2 3

我的按钮不适用于适配器视图,因此无法使用:holder.button

谢谢

编辑:


单击按钮时,我需要获取cardView上的名称,但每次它都会返回最后一张卡上的名称。

而不是获取
cardViewModel.getId()
使用位置变量,它将返回项目单击的当前位置。 您需要使用ArrayList或CardViewModel列表CardViewModel作为参数,然后您将能够通过

您需要通过如下所示的
CarViewModel
列表:

protected void onBindViewHolder(ViewHolder holder, final int position, ArrayList <CardViewModel> cardViewModelList)
CardViewModel cardviewModel = cardViewModelList.get(position)
这将给您带来预期的结果:

Log.d("id: ",cardViewModel.getId());

这是因为当绑定最后一个视图持有者时,它正在调用
按钮.setOnClickListener
,它将替换该按钮的任何现有侦听器。此行为是预期的/有效的。你想完成什么?我想获取屏幕上显示的项目的id。你在这里覆盖什么?
cardViewModel
在哪里设置?我不明白你说的话。这个适配器是用于列表控件还是什么?