我有一个应用程序,用户会看到一个项目列表,他们可以按下或分享。当他们按下时,像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
答案 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);
}