我有一个非常奇怪的问题。我先来描述一下观点的结构:
我要做的是根据用户操作将一个NestedScrollView对象替换为另一个。我为此创建了以下方法:
public void switchTableGroup(final TableGroup newTG){
final NestedScrollView removeNSV = currentNSV;
Thread switchView = new Thread(){
public void run(){
mainCoordinatorLayout.removeView(removeNSV);
mainCoordinatorLayout.addView(newTG.getNestedScrollView());
}
};
runOnUiThread(switchView);
this.currentTG = newTG;
this.currentNSV = newTG.getNestedScrollView();
}
(请注意,TableGroup是我内部数据结构的非图形对象)只要底层TableLayout中至少有一个Button对象,这样就可以正常工作。如果没有Button对象,则删除旧的NestedScrollView,并将新的NestedScrollView写入currentNSV并添加到CoordinatorLayout,但不知何故不可见。有了一些脏代码,这个问题就可以解决了:
public void switchTableGroupDirty(final TableGroup newTG){
final NestedScrollView removeNSV = currentNSV;
Thread switchView = new Thread(){
public void run(){
mainCoordinatorLayout.removeView(removeNSV);
mainCoordinatorLayout.addView(newTG.getNestedScrollView());
}
};
runOnUiThread(switchView);
this.currentTG = newTG;
this.currentNSV = newTG.getNestedScrollView();
Thread doItAgain = new Thread(){
public void run(){
mainCoordinatorLayout.removeView(newTG.getNestedScrollView());
mainCoordinatorLayout.addView(newTG.getNestedScrollView());
}
};
runOnUiThread(doItAgain);
}
我不想依赖两次做某事,是否有一些特定的命令迫使CoordinatorLayout重绘自己?我已经在CoordinatorLayout对象上尝试了invalidate()和refreshDrawableState(),但这没有帮助。还花了很多时间尝试各种组合,睡觉等等。你也可以想象,花了相当长的时间来确定Button的存在是正常方法成功的关键因素......
非常感谢帮助。