2017-02-16 17 views
-3

Я уже давно борюсь с этой проблемой, поэтому надеюсь, что кто-то сможет протянуть руку.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 объектов для заполнения вида.

ответ

0

Есть ситуации, когда обновление работает из коробки, и есть ситуации, когда это не так. для не рабочих случаев это помогло переназначить адаптер к нему-s displayelement в ViewPager

я использовал

 mAdapter.notifyDataSetChanged(); 
     mViewPager.setAdapter(mAdapter); 

в GridView и ListView я использовал

  mGridView.setAdapter(mAdapter); 
      mList.setAdapter(mDataAdapter); 
+0

Привет там, к сожалению, это не Работа. Когда я вызываю mAdaper.Clear(), он очищает все содержимое и удаляет вид с экрана, однако никогда не добавляет новые данные или не обновляет его. – freshwaterjoe