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