Android RecyclerView未更新视图或未调用onCreate视图持有者

Android RecyclerView未更新视图或未调用onCreate视图持有者,android,android-recyclerview,Android,Android Recyclerview,我有一个recyclerview,它不会更新recyclerview项中的文本 初始化回收器视图时,一切正常。但是当你调用filter方法时。它根据catlog为您提供正确的项目。项目的正确位置。ArrayList中正确的项数。但就连这张照片也被毕加索更新了。但它不会更新我在RecyclerView的OnBind上的textview public class HospitalAdapter extends RecyclerView.Adapter<HospitalAdapter.Hospi

我有一个recyclerview,它不会更新recyclerview项中的文本

初始化回收器视图时,一切正常。但是当你调用filter方法时。它根据catlog为您提供正确的项目。项目的正确位置。ArrayList中正确的项数。但就连这张照片也被毕加索更新了。但它不会更新我在RecyclerView的OnBind上的textview

public class HospitalAdapter extends RecyclerView.Adapter<HospitalAdapter.HospitalViewHolder> {

private ArrayList<Hospital> hospitalList;
private ArrayList<Hospital> originalList;
private LayoutInflater inflater;
private DatabaseReference db = FirebaseDatabase.getInstance().getReference();

private StorageReference storageRef = FirebaseStorage.getInstance().getReference();


//View FIELDS
private TextView HospitalName;
private TextView Phone;
private RatingBar Rating;
private ImageView Image;
private TextView Location;
private TextView Address;
private LinearLayout cardView;
private Context context;
private Activity activity;


public HospitalAdapter(Context context, Activity activity,String category,String search, ArrayList<Hospital> hospitalArrayList) {
    this.context = context;
    this.activity = activity;
    inflater = LayoutInflater.from(context);
    hospitalList = hospitalArrayList;


}



@NonNull
@Override
public HospitalViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = inflater.inflate(R.layout.hospital_list_item,parent,false);
    HospitalViewHolder holder = new HospitalViewHolder(view);
    Log.e("Holder","On CreateViewHolder getting called");
    return holder;
}

@Override
public void onBindViewHolder(@NonNull  HospitalViewHolder holder, int position) {
    Hospital hospital = hospitalList.get(position);

    HospitalViewHolder tempHolder = holder;

    HospitalName.setText(hospital.getName());
    Phone.setText(hospital.getContactNumber());
    Rating.setRating(hospital.getRating());
    Location.setText(hospital.getLocation());
    Address.setText(hospital.getAddress());
    final DatabaseReference dbrate = FirebaseDatabase.getInstance().getReference();





}

@Override
public int getItemCount() {
    return hospitalList.size();
}


public class HospitalViewHolder extends RecyclerView.ViewHolder {
    public HospitalViewHolder(@NonNull View itemView) {
        super(itemView);
        HospitalName = itemView.findViewById(R.id.hospital_list_item_Name);
        Phone = itemView.findViewById(R.id.hospital_list_item_phone);
        Rating = itemView.findViewById(R.id.hospital_list_item_rating);
        Image = itemView.findViewById(R.id.hospital_list_item_imageview);
        Address = itemView.findViewById(R.id.hospital_list_item_address);
        Location = itemView.findViewById(R.id.hospital_list_item_city);
        cardView = itemView.findViewById(R.id.hospital_list_item_cardview);

    }
}

private void sharedElementTransition(View view,Uri uri,Hospital hospital){
    Pair[] pair = new Pair[5];
    pair[0] = new Pair<View,String>(view.findViewById(R.id.hospital_list_item_imageview),"hospital_image");
    pair[1] = new Pair<View,String>(view.findViewById(R.id.hospital_list_item_rating),"hospital_rating");
    pair[2] = new Pair<View,String>(view.findViewById(R.id.hospital_list_item_cardview),"hospital_cardview");
    pair[3] = new Pair<View,String>(view.findViewById(R.id.hospital_list_item_Name),"hospital_name");
    pair[4] = new Pair<View,String>(view.findViewById(R.id.hospital_list_item_phone),"hospita_contact");
    ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(activity,pair);
    Intent i = new Intent(context, HospitalTabbed.class);


    i.putExtra("THE_URI",uri.toString());
    i.putExtra("Key",hospital.getKey());
    i.putExtra("Details",hospital.getDetails());
    i.putExtra("Rating",hospital.getRating());
    i.putExtra("CityName",hospital.getLocation());
    i.putExtra("Contact",hospital.getContactNumber());
    i.putExtra("Address",hospital.getAddress());
    i.putExtra("Name",hospital.getName());
    context.startActivity(i,options.toBundle());
}



public void filterList(ArrayList<Hospital> filteredList){
    hospitalList = filteredList;
    notifyDataSetChanged();
}
公共类HospitalAdapter扩展了RecyclerView.Adapter{ 私人ArrayList住院医生; 私家侦探作家; 私人充气机; 私有DatabaseReference db=FirebaseDatabase.getInstance().getReference(); private StorageReference storageRef=FirebaseStorage.getInstance().getReference(); //视场 私有文本视图HospitalName; 私用TextView电话; 私人评级杆评级; 私有图像查看图像; 私有文本视图位置; 私有文本视图地址; 私人线路布局卡视图; 私人语境; 私人活动; public HospitalAdapter(上下文上下文、活动、字符串类别、字符串搜索、ArrayList hospitalArrayList){ this.context=上下文; 这个。活动=活动; 充气器=充气器。从(上下文); hospitalList=hospitalArrayList; } @非空 @凌驾 公立医院ViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){ 视图=充气机。充气(右布局。医院列表项目,父项,false); HospitalViewHolder=新HospitalViewHolder(视图); Log.e(“Holder”,“在CreateViewHolder被调用时”); 报税表持有人; } @凌驾 公共无效onBindViewHolder(@NonNull HospitalViewHolder,int位置){ Hospital Hospital=住院医生.get(位置); HospitalViewHolder tempHolder=holder; HospitalName.setText(hospital.getName()); Phone.setText(hospital.getContactNumber()); Rating.setRating(hospital.getRating()); Location.setText(hospital.getLocation()); Address.setText(hospital.getAddress()); final DatabaseReference dbrate=FirebaseDatabase.getInstance().getReference(); } @凌驾 public int getItemCount(){ return hospitalList.size(); } 公共类HospitalViewHolder扩展了RecyclerView.ViewHolder{ 公共医院视图持有者(@NonNull View itemView){ 超级(项目视图); HospitalName=itemView.findviewbyd(R.id.hospital\u list\u item\u Name); Phone=itemView.findviewbyd(R.id.hospital\u list\u item\u Phone); 评级=itemView.findViewById(R.id.hospital\u list\u item\u评级); Image=itemView.findviewbyd(R.id.hospital\u list\u item\u imageview); Address=itemView.findViewById(R.id.hospital\u list\u item\u Address); 位置=itemView.findViewById(R.id.hospital\u list\u item\u city); cardView=itemView.findViewById(R.id.hospital\u list\u item\u cardView); } } 私有void sharedElementTransition(视图、Uri、医院){ 配对[]配对=新配对[5]; pair[0]=新的pair(view.findviewbyd(R.id.hospital\u list\u item\u imageview),“hospital\u image”); 配对[1]=新配对(view.findViewById(R.id.hospital\U list\U item\U rating),“hospital\U rating”); pair[2]=新的pair(view.findViewById(R.id.hospital\u list\u item\u cardview),“hospital\u cardview”); pair[3]=新的pair(view.findviewbyd(R.id.hospital\u list\u item\u Name),“hospital\u Name”); 配对[4]=新配对(view.findviewbyd(R.id.hospital\u list\u item\u phone),“hospita\u contact”); ActivityOptions=ActivityOptions.MakeScenetTransitionAnimation(活动,成对); 意向i=新意向(上下文,HospitalTabbed.class); i、 putExtra(“_URI”,URI.toString()); i、 putExtra(“Key”,hospital.getKey()); i、 putExtra(“Details”,hospital.getDetails()); i、 putExtra(“评级”,hospital.getRating()); i、 putExtra(“CityName”,hospital.getLocation()); i、 putExtra(“Contact”,hospital.getContactNumber()); i、 putExtra(“地址”,hospital.getAddress()); i、 putExtra(“Name”,hospital.getName()); startActivity(i,options.toBundle()); } 公共无效筛选器列表(ArrayList筛选器列表){ 医院列表=过滤列表; notifyDataSetChanged(); } }

这是我的回收视图。现在我想知道我的布局文件是否有问题。因为回收商有时会在不同的布局上采取不同的行动

<?xml version="1.0" encoding="utf-8"?>

android:orientation=“垂直” android:layout_marginBottom=“8dp”>

问题摘要。列表项textview未得到更新。但是去另一个活动时点击一下就可以了。毕加索正在更新的图像很好,有关该项目的catlog信息也很正确。仅当筛选文本视图时,文本视图不会更新。

all

private TextView HospitalName;
private TextView Phone;
private TextView Location;
private TextView Address;

未更新?

有几种可能性:
1.您需要将LayoutManager设置为RecyclerView
2.您需要将适配器设置为Recyclerview

3.您需要确保getItemCount不是0

我忘了我需要在旧版的字段中进行更改,而不是在adapters字段中进行更改

OnBindViewHolder

    holder.HospitalName.setText(hospital.getName());
    holder.Phone.setText(hospital.getContactNumber());
    holder.Rating.setRating(hospital.getRating());
    holder.Location.setText(hospital.getLocation());
    holder.Address.setText(hospital.getAddress());

我已经修好了。但是,是的,其中有三种可能性。但这不是问题所在。谢谢你提醒。
    holder.HospitalName.setText(hospital.getName());
    holder.Phone.setText(hospital.getContactNumber());
    holder.Rating.setRating(hospital.getRating());
    holder.Location.setText(hospital.getLocation());
    holder.Address.setText(hospital.getAddress());