TextView.setText() 不更新 ExpandableListView 适配器中的文本
TextView.setText() doesn't update text in ExpandableListView adapter
我写了一个扩展 BaseExpandableListAdapter
的 class。单击一个组时,我希望它展开,然后我在视图中的自定义指示器将以动画方式旋转 180。它有效。
我的问题是,在同一个 clicklistener
上,我想使用 setText()
方法更新 TextView
,但是当我 运行 它时,它不会更新视图。
我测试了问题是否出在对 TextView
的引用中:更改可见性、旋转它、为其设置动画,它们都有效。只是 setText()
不起作用。
下面是适配器class中的相关代码:(其实有两个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
不更新文本吗?
根据@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());
}
});
}
我写了一个扩展 BaseExpandableListAdapter
的 class。单击一个组时,我希望它展开,然后我在视图中的自定义指示器将以动画方式旋转 180。它有效。
我的问题是,在同一个 clicklistener
上,我想使用 setText()
方法更新 TextView
,但是当我 运行 它时,它不会更新视图。
我测试了问题是否出在对 TextView
的引用中:更改可见性、旋转它、为其设置动画,它们都有效。只是 setText()
不起作用。
下面是适配器class中的相关代码:(其实有两个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
不更新文本吗?
根据@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());
}
});
}