TextView.setText()不更新ExpandableListView适配器中的文本

时间:2017-12-08 11:40:09

标签: android textview expandablelistview expandablelistadapter

我写了一个扩展import x from 'xpath'的类。单击一个组时,我希望它展开,然后我在视图中的自定义指示器将动画180度旋转。它有效。

我的问题是在同一个BaseExpandableListAdapter上我想使用clicklistener方法更新TextView,但是当我运行它时,它不会更新视图。
我测试了问题是否在setText()的引用中:更改可见性,旋转它,设置动画,它们都可以工作。它只是TextView不起作用。
以下是适配器类中的相关代码:(实际上有两个setText()我想更新)

TextViews

我也尝试将此代码放在getGroupView()中(将OnClickListener分配给视图),但我得到了相同的结果。

其他一些相关方法:

@Override
public void onGroupExpand(int groupPosition) {
    GroupViewHolder holder = mViewHolderSparseArray.get(groupPosition);
    Lesson lesson = (Lesson) getChild(groupPosition, 0);
    holder.indicatorView.animate().rotation(180);
    holder.teacherView.setText(lesson.getTeacher());
    holder.classroomView.setText(lesson.getClassroom());
}

@Override
public void onGroupCollapse(int groupPosition) {
    GroupViewHolder holder = mViewHolderSparseArray.get(groupPosition);
    holder.indicatorView.animate().rotation(0);
    holder.teacherView.setText("...");
    holder.classroomView.setText("");
}

为什么我的@Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public boolean hasStableIds() { return true; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } 没有更新其文字的任何想法?

1 个答案:

答案 0 :(得分:0)

根据@IntelliJAmiya链接的答案,setText()没有更新,因为它可能没有在UI线程上运行。

以下是我为解决此问题所做的工作:

@Override
public void onGroupExpand(int groupPosition) {
    final GroupViewHolder holder = mViewHolderSparseArray.get(groupPosition);
    final Lesson lesson = (Lesson) getChild(groupPosition, 0);
    holder.indicatorView.animate().rotation(180);
    holder.teacherView.post(new Runnable() {
        @Override
        public void run() {
            holder.teacherView.setText(lesson.getTeacher());
            holder.classroomView.setText(lesson.getClassroom());
        }
    });
}