问题描述
由于我的viewholder类是静态的,因此我的arraylist无法获取数据,并且它为null。错误是索引:0,大小:0。我认为这可能是由于静态Reminder_ViewHolder导致的。我需要在holder类中添加位置或数组列表,以便我可以在单击监听器上实现位置postion.so,请问有人可以帮助我吗?
我的适配器类
public class Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
ArrayList<Model> arrayList;
Context context;
int total_types;
private static final String TAG = "RecyclerAdapter";
com.example.caretaker.Database.database database;
public Adapter(ArrayList<Model> arrayList,Context context) {
this.arrayList = arrayList;
this.context = context;
this.total_types = arrayList.size();
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
View view;
switch (viewType) {
case Model.HOME_FRAGMENT:
view = LayoutInflater.from(parent.getContext()).
inflate(R.layout.reminder_sample_for_recycler_view_home_screen,parent,false);
return new Home_ViewHolder(view);
return new Home_ViewHolder(view);
case Model.REMINDER_FRAGMENT:
view =
LayoutInflater.from(parent.getContext()).inflate(R.layout.reminder_sample_for_recycler_view,false);
return new Reminder_ViewHolder(view);
}
return null;
}
@Override
public int getItemViewType(int position) {
switch (arrayList.get(position).ViewType) {
case 0:
return Model.HOME_FRAGMENT;
case 1:
return Model.REMINDER_FRAGMENT;
}
return 0;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder,int position) {
Model model = arrayList.get(position);
database = new database(context);
if (model != null) {
switch (model.ViewType) {
case Model.HOME_FRAGMENT:
//((BannerTypeViewHolder) holder).bannerImg.setBackgroundResource(R.drawable.banner);
break;
case Model.REMINDER_FRAGMENT:
((Reminder_ViewHolder) holder).title.setText(model.getName());
((Reminder_ViewHolder) holder).time.setText(model.getTime());
((Reminder_ViewHolder) holder).date.setText(model.getDate());
((Reminder_ViewHolder) holder).set_doasge.setText("Medicine Dose is " +
model.getDose() + " mg");
// Code for setting up the Medicine Type
String name = ((Reminder_ViewHolder) holder).title.getText().toString();
Cursor cursor = database.getAllItems(name);
((Reminder_ViewHolder) holder).mediType = -1;
while (cursor.movetoNext()) {
((Reminder_ViewHolder) holder).mediType = cursor.getInt(5);
}
Log.e(TAG,"mediType is " + ((Reminder_ViewHolder) holder).mediType);
if (((Reminder_ViewHolder) holder).mediType == 1) {
((Reminder_ViewHolder)
holder).mediType_view.setBackgroundResource(R.drawable.ic_syrup_icon);
Log.e(TAG,"Image view is set to syrup");
} else if (((Reminder_ViewHolder) holder).mediType == 2) {
((Reminder_ViewHolder)
holder).mediType_view.setBackgroundResource(R.drawable.ic_pill_icon);
Log.e(TAG,"Image view is set to pill");
} else if (((Reminder_ViewHolder) holder).mediType == 3) {
((Reminder_ViewHolder)
holder).mediType_view.setBackgroundResource(R.drawable.ic_syringe_icon);
Log.e(TAG,"Image view is set to syringe");
} else if (((Reminder_ViewHolder) holder).mediType == 4) {
((Reminder_ViewHolder)
holder).mediType_view.setBackgroundResource(R.drawable.ic_tablet_icon);
Log.e(TAG,"Image view is set to tablet");
} else {
Log.e(TAG,"Image view is set to nothing");
}
// Medicine Type code Ended Up here.
boolean isExpanded = arrayList.get(position).isExpanded();
((Reminder_ViewHolder) holder).expandableLayout.setVisibility(isExpanded ?
View.VISIBLE : View.GONE);
break;
}
}
}
@Override
public int getItemCount() {
return arrayList.size();
}
public static class Home_ViewHolder extends RecyclerView.ViewHolder {
public Home_ViewHolder(@NonNull View itemView) {
super(itemView);
}
}
public static class Reminder_ViewHolder extends RecyclerView.ViewHolder {
TextView title,time,date,set_doasge;
Button cancel_alarm,update_alarm;
ImageView mediType_view;
int mediType;
ArrayList<Model> arrayList;
database database;
ConstraintLayout expandableLayout;
public Reminder_ViewHolder(@NonNull View itemView) {
super(itemView);
title = itemView.findViewById(R.id.alarm_title);
time = itemView.findViewById(R.id.alarm_time);
date = itemView.findViewById(R.id.alarm_date);
set_doasge = itemView.findViewById(R.id.set_dosage);
update_alarm = itemView.findViewById(R.id.update_button);
cancel_alarm = itemView.findViewById(R.id.cancel_button);
expandableLayout = itemView.findViewById(R.id.expandableLayout);
mediType_view = itemView.findViewById(R.id.mediType_view);
Context context = itemView.getContext();
arrayList = new ArrayList<>();
title.setonClickListener(v -> {
Model model = arrayList.get(getAdapterPosition());
model.setExpanded(!model.isExpanded());
});
cancel_alarm.setonClickListener(v -> {
String text = title.getText().toString();
Cursor cursor = database.getAllItems(text);
String title = null,date = null,time = null;
int requestCode = -1,dosage = -1;
mediType = -1;
while (cursor.movetoNext()) {
title = cursor.getString(0);
time = cursor.getString(1);
date = cursor.getString(2);
dosage = cursor.getInt(3);
requestCode = cursor.getInt(4);
mediType = cursor.getInt(5);
}
if (title != null && time != null && date != null && dosage != -1 && requestCode != -1) {
Intent intent = new Intent(context,Deletion_of_Alarm.class);
intent.putExtra("title",title);
intent.putExtra("date",date);
intent.putExtra("time",time);
intent.putExtra("dosage",dosage);
intent.putExtra("requestCode",requestCode);
Log.e(TAG,"title is " + title);
Log.e(TAG,"date is " + date);
Log.e(TAG,"time is " + time);
Log.e(TAG,"dosage is " + dosage);
Log.e(TAG,"requestCode is " + requestCode);
context.startActivity(intent);
} else if (title == null && time == null && date == null && dosage == -1 && requestCode
== -1) {
CustomToast.warningToast(context,"Alarm doesn't exits anymore. Swipe down to
refresh");
}
});
}
}
}
这是模型类
public class Model {
public static final int HOME_FRAGMENT = 0;
public static final int REMINDER_FRAGMENT = 1;
String name,date;
int dose,ViewType;
int mediType;
private boolean expanded;
public Model(int ViewType,String name,String time,String date,int message,int mediType) {
this.name = name;
this.time = time;
this.date = date;
this.dose = message;
this.mediType = mediType;
this.ViewType = ViewType;
this.expanded = false;
}
public int getMediType() {
return mediType;
}
public void setMediType(int mediType) {
this.mediType = mediType;
}
public boolean isExpanded() {
return expanded;
}
public void setExpanded(boolean expanded) {
this.expanded = expanded;
}
public int getDose() {
return dose;
}
public void setDose(int dose) {
this.dose = dose;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public Model() {
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
String service_name,service_amount,service_date;
public Model(int ViewType,String service_name,String service_amount,String service_date) {
this.service_name = service_name;
this.service_amount = service_amount;
this.service_date = service_date;
this.ViewType = ViewType;
}
}
现在我主要活动中的一部分代码是:
arrayList = db.ViewData();
recyclerView.setLayoutManager(new linearlayoutmanager(getActivity()));
recyclerView.setHasFixedSize(true);
recyclerAdapter = new com.example.caretaker.RecyclerView.Adapter(arrayList,getActivity());
recyclerView.setAdapter(recyclerAdapter);
recyclerAdapter.notifyDataSetChanged();
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)