2017-02-16 124 views
-3

我一直在努力,现在这个问题相当长的一段时间,所以希望有人将能够伸出援助之手。ArrayAdapter没有刷新或更新适配器查看内容

本质上我有一个ArrayAdapter,它将一个ArrayList对象CourseCardModel提供给一个自定义可滑动视图,该视图扩展了AdapterView

我可以安装适配器并首次查看第一次绝对没问题,课程卡片显示出来并可以轻扫,但是当我尝试更改与ArrayAdapter关联的CourseCardModels的ArrayList时,视图不会按照随着新的数据,它只是冻结。

连接到适配器的数据需要更改的原因是由于我希望用户能够过滤课程卡,因此例如他们只能从剑桥大学查看卡。

这个问题的任何帮助将非常感激,我有这么搜罗了类似的问题,但还没有找到那个为我工作的解决方案。试图改变数据

// 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

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 ; 
} 

} 

代码()方法返回CourseCardModel对象的初始列表来填充视图。

回答

0

存在该更新开箱,并在有些情况下它没有的情况。对于非工作情况下,它有助于重新分配适配器它-S显示元素

在viewPager我用

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

在GridView控件和ListView我用

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

嗨,可惜这次没工作。当我打电话mAdaper.Clear()它清除所有的内容,并从屏幕移开的观点,但是从来没有将新的数据或更新它。 – freshwaterjoe