gpt4 book ai didi

android - RecyclerView 项目没有出现在正确的位置

转载 作者:行者123 更新时间:2023-11-30 01:58:09 27 4
gpt4 key购买 nike

当我滚动 recyclerView 时,一些项目出现在它们不应该出现的位置。

在我应该只有“First”或只有“Second”的地方,我突然在一个 View 中同时拥有了“First Second”。

编辑:很可能它重用了一些 View ,但我该如何检查这是否正确?

我的代码是:

    @Override
public void onBindViewHolder(MyRecyclerAdapter.ViewHolder holder, int position) {
DiaryDay item = items.get(position);
holder.tvDay.setText(item.getDay());
holder.tvMonth.setText(item.getMonth());
showSplash(holder, item);

if (holder.tvSunBathingMins!=null) {
holder.tvSunBathingMins.setText(String.valueOf(item.getSunBathing()) + " mins sunbathing. ");
}

}

private void showSplash(ViewHolder holder, DiaryDay item) {
if ( item.getSun_1() + item.getSun_2() + item.getSun_3() + item.getSun_4() == 4 ) {
holder.tvSplash2.setText( "All day! Amazing!");
} else {
if (item.getSun_1() != 0) {
holder.tvSplash1.setText("First ");
}
if (item.getSun_2() != 0) {
holder.tvSplash2.setText("Second ");
}
if (item.getSun_3() != 0) {
holder.tvSplash3.setText("Third ");
}
if (item.getSun_4() != 0) {
holder.tvSplash4.setText("Fourth ");
}
}

}




@Override
public MyRecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(itemLayout, parent, false);
return new ViewHolder(v);
}

最后我的 ViewHolder 是:

   public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView tvDay;
public TextView tvMonth;
public TextView tvSplash1; public TextView tvSplash2; public TextView tvSplash3; public TextView tvSplash4;
public TextView tvSunBathingMins;
public TextView tvSumMins;

public ViewHolder(View itemView) {
super(itemView);
tvDay = (TextView) itemView.findViewById(R.id.dayID);
tvMonth = (TextView) itemView.findViewById(R.id.monthID);
tvSplash1 = (TextView) itemView.findViewById(R.id.sun1);
tvSplash2 = (TextView) itemView.findViewById(R.id.sun2);
tvSplash3 = (TextView) itemView.findViewById(R.id.sun3);
tvSplash4 = (TextView) itemView.findViewById(R.id.sun4);
tvSunBathingMins = (TextView) itemView.findViewById(R.id.sunbathMinsID);
tvSumMins = (TextView) itemView.findViewById(R.id.sumMinsID);

}
}

最佳答案

问题在于您定义没有 else 子句的 if 语句的方式。当 View 持有者被回收时,会发生什么情况,诸如 tvSplash1、tvSplash2 等 View 仍然具有从离开屏幕的 View 分配的值。这就是为什么您需要按如下方式重置这些项目:

@Override
public void onBindViewHolder(MyRecyclerAdapter.ViewHolder holder, int position) {
DiaryDay item = items.get(position);
holder.tvDay.setText(item.getDay());
holder.tvMonth.setText(item.getMonth());
showSplash(holder, item);

if (holder.tvSunBathingMins!=null) {
holder.tvSunBathingMins.setText(String.valueOf(item.getSunBathing()) + " mins sunbathing. ");
} else {
holder.tvSunBathingMins.setText("");
}
}

private void showSplash(ViewHolder holder, DiaryDay item) {
if ( item.getSun_1() + item.getSun_2() + item.getSun_3() + item.getSun_4() == 4 ) {
holder.tvSplash2.setText( "All day! Amazing!");
} else {
if (item.getSun_1() != 0) {
holder.tvSplash1.setText("First ");
} else {
holder.tvSplash1.setText("");
}

if (item.getSun_2() != 0) {
holder.tvSplash2.setText("Second ");
} else {
holder.tvSplash2.setText("");
}
if (item.getSun_3() != 0) {
holder.tvSplash3.setText("Third ");
} else {
holder.tvSplash3.setText("");
}
if (item.getSun_4() != 0) {
holder.tvSplash4.setText("Fourth ");
} else {
holder.tvSplash4.setText("");
}
}
}

关于android - RecyclerView 项目没有出现在正确的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31880888/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com