Я уже давно борюсь с этой проблемой, поэтому надеюсь, что кто-то сможет протянуть руку.ArrayAdapter не обновляется и не обновляется Адаптер Просмотр содержимого
По существу у меня есть ArrayAdapter, который передает ArrayList из CourseCardModel
объектов в пользовательский Swableable View, который расширяет AdapterView
.
Я могу установить адаптер и просмотреть первый раз абсолютно нормально, при этом карты курсов отображаются и могут прокручиваться, однако, когда я пытаюсь изменить ArrayList CourseCardModels
, связанный с ArrayAdapter, вид не изменяется в соответствии с с новыми данными он просто зависает.
Причина, по которой данные, привязанные к адаптеру, необходимо изменить, связано с тем, что я хочу, чтобы пользователь мог фильтровать карты курса, так что, например, они могут просматривать карты только из Кембриджского университета.
Любая помощь в этом вопросе была бы чрезвычайно оценена, я искал SO для подобных вопросов, но еще не нашел решение, которое сработало для меня.
ArrayAdapter Код
public class CustomCardAdapter extends ArrayAdapter {
private TextView courseName, uniName, entryStandards, courseDuration, studyMode, qualification,
studentSatisfaction, gradProspects, t1, t2, t3, t4, t5, t6;
ArrayList<CourseCardModel> items;
View v;
LayoutInflater vi;
public CustomCardAdapter(Activity context, int resource, ArrayList<CourseCardModel> courses) {
super(context, resource, courses);
this.items = courses;
vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@NonNull
@Override
public View getView(int position, View convertView, ViewGroup parent) {
v = convertView;
if (v == null) {
v = vi.inflate(R.layout.course_card_inner_template, parent , false);
}
CourseCardModel c = (CourseCardModel) getItem(position);
if (c != null) {
courseName = (TextView) v.findViewById(R.id.courseCardCourseName);
uniName = (TextView) v.findViewById(R.id.courseCardUniName);
entryStandards = (TextView) v.findViewById(R.id.courseCardEntryStandards);
courseDuration = (TextView) v.findViewById(R.id.courseCardCourseDuration);
studyMode = (TextView) v.findViewById(R.id.courseCardStudyMode);
qualification = (TextView) v.findViewById(R.id.courseCardQualification);
studentSatisfaction = (TextView) v.findViewById(R.id.courseCardStudentSatisfaction);
gradProspects = (TextView) v.findViewById(R.id.courseCardGraduateProspects);
t1 = (TextView) v.findViewById(R.id.cardTV1);
t2 = (TextView) v.findViewById(R.id.cardTV2);
t3 = (TextView) v.findViewById(R.id.cardTV3);
t4 = (TextView) v.findViewById(R.id.cardTV4);
t5 = (TextView) v.findViewById(R.id.cardTV5);
t6 = (TextView) v.findViewById(R.id.cardTV6);
v.setBackgroundResource(R.drawable.newcard);
courseName.setText(c.getCourse().getCourseName());
uniName.setText(c.getCourse().getUniversity());
entryStandards.setText(c.getCourse().getEntryStandards());
courseDuration.setText(c.getCourse().getCourseDuration());
studyMode.setText(c.getCourse().getStudyMode());
qualification.setText(c.getCourse().getQualification());
gradProspects.setText(c.getCourse().getGradProspects() + "/100");
studentSatisfaction.setText(c.getCourse().getStudentSatisfaction() + "/5");
}
if(position ==0)
{
//float alpha = (float) 0.8;
//v.setAlpha(alpha);
courseName.setVisibility(View.VISIBLE);
}
else if (position == 1){
// Prepare the View for the animation
v.setVisibility(View.VISIBLE);
float alpha = (float) 0.8;
float alpha2 = (float) 0.3;
courseName.setAlpha(alpha2);
uniName.setAlpha(alpha2);
entryStandards.setAlpha(alpha2);
courseDuration.setAlpha(alpha2);
studyMode.setAlpha(alpha2);
qualification.setAlpha(alpha2);
studentSatisfaction.setAlpha(alpha2);
gradProspects.setAlpha(alpha2);
t1.setAlpha(alpha2);
t2.setAlpha(alpha2);
t3.setAlpha(alpha2);
t4.setAlpha(alpha2);
t5.setAlpha(alpha2);
t6.setAlpha(alpha2);
v.setAlpha(alpha);
}
else {
v.setVisibility(View.INVISIBLE);
}
return v ;
}
}
код, который пытается изменить данные
// Set up and assign card adapter
ca = new CustomCardAdapter(CardsActivity.this, android.R.layout.simple_list_item_1, generateCourseCards());
flingContainer.init(CardsActivity.this, ca);
// Update the data in the adapter
ca.clear();
ca.addAll(coursesToReturn);
ca.notifyDataSetChanged();
GenerateCourseCards() Метод возвращает первоначальный список CourseCardModel
объектов для заполнения вида.
Привет там, к сожалению, это не Работа. Когда я вызываю mAdaper.Clear(), он очищает все содержимое и удаляет вид с экрана, однако никогда не добавляет новые данные или не обновляет его. – freshwaterjoe