Android studio 向静态ViewHolder类传递position或arraylist时出错
由于我的viewholder类是静态的,所以不知何故,我的arraylist没有获取数据,它是空的。错误为索引:0,大小:0。我认为这可能是由于静态提醒和视图持有者造成的。我需要position或arraylist在我的holder类中,这样我就可以实现对项目position的单击侦听器。所以,如果有人可以帮助我,请 我的适配器类Android studio 向静态ViewHolder类传递position或arraylist时出错,android-studio,arraylist,android-recyclerview,static-methods,android-viewholder,Android Studio,Arraylist,Android Recyclerview,Static Methods,Android Viewholder,由于我的viewholder类是静态的,所以不知何故,我的arraylist没有获取数据,它是空的。错误为索引:0,大小:0。我认为这可能是由于静态提醒和视图持有者造成的。我需要position或arraylist在我的holder类中,这样我就可以实现对项目position的单击侦听器。所以,如果有人可以帮助我,请 我的适配器类 public class Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
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, parent,
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");
}
});
}
}
}
现在,我的主要活动中的部分代码是:
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();
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();