ArrayAdapter未刷新或更新适配器视图内容

时间:2017-02-16 11:14:07

标签: java android android-arrayadapter android-adapterview

我一直在努力解决这个问题已经有一段时间了,所以希望有人能够伸出援助之手。

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

我可以设置适配器并首次查看第一次绝对正常,课程卡显示并且能够滑动,但是当我尝试更改与ArrayAdapter关联的CourseCardModels的ArrayList时,视图不会根据新数据改变,它只是冻结。

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

对此问题的任何帮助都会非常感激,我已经搜索过类似问题的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个对象的初始列表以填充视图。

1 个答案:

答案 0 :(得分:0)

有些情况下,更新是开箱即用的,有些情况下则没有。对于非工作情况,它有助于将适配器重新分配给它的显示元素

在viewPager中我使用了

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

在gridview和listview中我使用了

{{1}}