【问题标题】:ArrayAdapter not refreshing or updating Adapter View contentsArrayAdapter 不刷新或更新适配器视图内容
【发布时间】:2017-02-16 11:14:06
【问题描述】:

我已经为这个问题苦苦挣扎了很长一段时间,所以希望有人能够伸出援助之手。

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

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

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

非常感谢您对此问题的任何帮助,我已经搜索过类似问题,但尚未找到适合我的解决方案。

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 对象的初始列表以填充视图。

【问题讨论】:

    标签: java android android-arrayadapter android-adapterview


    【解决方案1】:

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

    在我使用的 viewPager 中

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

    在我使用的gridview和listview中

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

    【讨论】:

    • 您好,很遗憾,这不起作用。当我调用 madaper.Clear() 时,它会清除所有内容并从屏幕上删除视图,但从不添加或更新新数据。
    猜你喜欢
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多