Java Android RecyclerView,回收工作不正常
我有一个我正在使用的Java Android RecyclerView,回收工作不正常,java,android,android-recyclerview,Java,Android,Android Recyclerview,我有一个我正在使用的RecyclerView。我以前使用过RecyclerView,但从未遇到过这个问题 当我上下滚动时,一些项目会消失,而一些消失的项目会再次出现在底部 代码: ViewHolder: public class ViewHolder extends RecyclerView.ViewHolder { public TextView txt; public ViewHolder(View view) { super(view);
RecyclerView
。我以前使用过RecyclerView
,但从未遇到过这个问题
当我上下滚动时,一些项目会消失,而一些消失的项目会再次出现在底部
代码:
ViewHolder
:
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView txt;
public ViewHolder(View view) {
super(view);
txt = (TextView) view.findViewById(R.id.txt);
}
}
public class MyAdapter extends RecyclerView.Adapter<ViewHolder> {
private final Activity activity;
private final ArrayList<HashMap<String, String>> mItems;
public MyAdapter (Activity activity, ArrayList<HashMap<String, String>> mItems) {
this.activity = activity;
this.mItems= mItems;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
return new ViewHolder(LayoutInflater.from(activity).inflate(R.layout.items, viewGroup, false));
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
HashMap<String, String> item = mItems.get(position);
String info = item.get("info ");
if (info!= null) {
viewHolder.txt.setText(info);
} else {
viewHolder.txt.setVisibility(View.GONE);
}
}
@Override
public int getItemCount() {
return (null != mItems? mItems.size() : 0);
}
}
适配器
:
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView txt;
public ViewHolder(View view) {
super(view);
txt = (TextView) view.findViewById(R.id.txt);
}
}
public class MyAdapter extends RecyclerView.Adapter<ViewHolder> {
private final Activity activity;
private final ArrayList<HashMap<String, String>> mItems;
public MyAdapter (Activity activity, ArrayList<HashMap<String, String>> mItems) {
this.activity = activity;
this.mItems= mItems;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
return new ViewHolder(LayoutInflater.from(activity).inflate(R.layout.items, viewGroup, false));
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
HashMap<String, String> item = mItems.get(position);
String info = item.get("info ");
if (info!= null) {
viewHolder.txt.setText(info);
} else {
viewHolder.txt.setVisibility(View.GONE);
}
}
@Override
public int getItemCount() {
return (null != mItems? mItems.size() : 0);
}
}
公共类MyAdapter扩展了RecyclerView.Adapter{
私人最终活动;
私有最终阵列列表;
公共MyAdapter(活动,ArrayList mItems){
这个。活动=活动;
this.mItems=mItems;
}
@凌驾
公共视图持有者onCreateViewHolder(视图组视图组,int i){
返回新的ViewHolder(LayoutInflater.from(activity).充气(R.layout.items,viewGroup,false));
}
@凌驾
公共无效onBindViewHolder(ViewHolder ViewHolder,int位置){
HashMap item=mItems.get(位置);
字符串信息=item.get(“信息”);
如果(信息!=null){
viewHolder.txt.setText(信息);
}否则{
viewHolder.txt.setVisibility(View.GONE);
}
}
@凌驾
public int getItemCount(){
返回值(null!=mItems?mItems.size():0);
}
}
onBindViewHolder
重用视图,因此假设第一次调用onBindViewHolder()
,info
为null
。这将导致该行具有视图的可见性。已消失
当再次调用onBindViewHolder
绑定新行时,该行的视图仍然是view。GONE
-绑定的行之间不会重置任何内容
因此,if语句应完全重置状态:
if (info!= null) {
viewHolder.txt.setText(info);
viewHolder.txt.setVisibility(View.VISIBLE);
} else {
viewHolder.txt.setVisibility(View.GONE);
}
这将确保正确设置每行的可见性