notifyItemChanged(pos)如何将正确的位置传递给onBindViewHolder?

时间:2016-02-26 14:04:00

标签: java android android-recyclerview recycler-adapter

我有一个应用程序,用户会看到一个项目列表,他们可以按下或分享。当他们按下时,像ImageButton的图像被更改,但我记录了onBindViewHolder中位置的输出,它与我实际点击的确切位置不同

这是在我的onCreateViewHolder中进行一些计算,它会输出所点击项目的正确位置

public void onHeartPress(View imgB,int pos)
{
    Log.d("Postion",pos);
    notifyItemChanged(pos)
}

然后我会在收到通知后尝试记录位置

 public void onBindViewHolder(final ViewHolder holder,  int position)
    {
       Log.d("Postion",position);
    }

传递给onBindViewHolder的位置不正确,例如,如果按下位置0的项目,则位置5和0将传递给onBindViewHolder,而不仅仅是位置0

1 个答案:

答案 0 :(得分:0)

调用位置0和5的原因是因为它是recyclerView。它会回收您的观点。如果您只想通知已经检查过的视图,您应该创建一个布尔数组,其大小等于您正在使用的适配器的大小。然后,您可以通过心脏按压方法更改值

public void onHeartPress(View imgB,int pos)
{
    Log.d("Postion",pos);
     yourArray[pos] = true;
     // if you want to change the others to false;
     for(int i = 0; i < yourArray.length(); i++{
           if( i != pos ){
           yourArray[pos] = false;
            }} 
    notifyItemChanged(pos)
}

你的适配器

public void onBindViewHolder(final ViewHolder holder,  int position)
    {
         if(yourArray[position])
       Log.d("Postion",position);
    }