【问题标题】:TextView.setText() doesn't update text in ExpandableListView adapterTextView.setText() 不会更新 ExpandableListView 适配器中的文本
【发布时间】:2018-05-22 15:50:42
【问题描述】:

我写了一个扩展BaseExpandableListAdapter 的类。当单击一个组时,我希望它展开,然后视图中的自定义指示器将为 180 旋转设置动画。它有效。

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

@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("");
}

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

其他一些相关方法:

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

任何想法为什么我的TextView 不更新其文本?

【问题讨论】:

  • 致电notifyDataSetChanged ();stackoverflow.com/a/23281494/3395198
  • @IntelliJAmiya 我看不出 notifyDataSetChanged() 会有什么帮助(试过了,没用),但你链接的答案有帮助。我会发布一个答案。

标签: android textview expandablelistview expandablelistadapter


【解决方案1】:

根据@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());
        }
    });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多