我正在为毕业项目申请公交车。
我有两个总线信息api,并使用RecyclerView
来显示这些信息。
当此位置(?)的RecyclerView
具有特殊的跟踪器值时,我想显示隐藏的图像视图。所以我只用
holder.tv_buspointer.setVisibility(View.VISIBLE);
显示。
我不确定它是否可以工作,因此我将跟踪器值放在最后一个Arraylist
(在适配器中使用)中。我必须滚动到屏幕的末尾以查看可见的imageview。在我滚动到上侧之前,一切看上去都找到了。一些recyclerview的imageview也出现了。当我向上滚动时,我会看到很多看不见的imageview出现。
我认为recyclerview中的onBindViewHolder
方法有问题。
你们能帮我吗?
谢谢。
package com.example.absin.firebasebus;
import android.content.Context;
import android.graphics.Color;
import android.support.annotation.NonNull;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
/**
* Created by absin on 2019-05-17.
*/
class station_after { //노선이 가지고 있는 정류장을 모두 출력하기 위해 만든 클래스
String stationId; //정류소 아이디
String mobileNo; //정류소 번호
String stationName;
int tracker =0;
public String getStationId() { return stationId; }
public String getMobileNo() { return mobileNo; }
public String getStationName() { return stationName; }
public int getTracker() { return tracker; }
public void setStationId(String stationId) { this.stationId = stationId; }
public void setStationName(String stationName) { this.stationName = stationName; }
public void setMobileNo(String mobileNo) { this.mobileNo = mobileNo; }
public void setTracker(int tracker) {this.tracker = tracker; }
}
class station_tracker { //이 클래스의 용도에 대한 자세한 설명은 Station_After_Number의 MySyncTask3 class 바로 위에 작성해두었다.
String stationId;
public String getStaionId() { return stationId;}
public void setStationId(String stationId) {this.stationId= stationId;}
}
public class AdapterSAN extends RecyclerView.Adapter<AdapterSAN.MyViewHolder> {
private ArrayList<station_after> mList;
private LayoutInflater mInflate;
private Context mContext;
View view;
public AdapterSAN(Context context, ArrayList<station_after> itmes) {
this.mList = itmes;
this.mInflate = LayoutInflater.from(context);
this.mContext = context;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
view = mInflate.inflate(R.layout.san_iten, parent, false);
MyViewHolder viewHolder = new MyViewHolder(view);
return viewHolder;
}
@Override
//뷰에 값이 채워질 3개를 여기서 하는 것
public void onBindViewHolder(@NonNull MyViewHolder holder, final int position) {
holder.tv_stationName.setText(mList.get(position).stationName);
holder.tv_buspointer.setVisibility(View.VISIBLE);
//Click event
}
@Override
public int getItemCount() {
return mList.size();
}
//ViewHolder
public static class MyViewHolder extends RecyclerView.ViewHolder {
public TextView tv_stationName;
public ImageView tv_buspointer;
public MyViewHolder(View itemView) {
super(itemView);
tv_stationName = itemView.findViewById(R.id.tv_stationname2);
tv_buspointer = itemView.findViewById(R.id.tv_image);
}
}
}
答案 0 :(得分:0)
RecyclerView
从其他位置(因此而得名)回收视图。
请确保您的onBindViewHolder
可以处理这种情况,以便以前绑定到满足条件并显示imageView的位置的ViewHolders在重新用于不符合条件的项目时会正确隐藏它。
if(condition)
holder.tv_buspointer.setVisibility(View.VISIBLE);
else
holder.tv_buspointer.setVisibility(View.GONE);