我有一个带有Button和GridLayout的活动,有很多孩子。如果我在onCreate()中添加所有这些孩子,我的活动会出现在一个滞后的屏幕上:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout main = new LinearLayout(this);
main.setOrientation(LinearLayout.VERTICAL);
Button button = new Button(this);
button.setText("test");
main.addView(button);
GridLayout testGrid = new GridLayout(this);
testGrid.setColumnCount(5);
for (int i = 0; i < 100; i++)
testGrid.addView(new Button(this));
main.addView(testGrid);
setContentView(main);
}
但我希望至少我的Buttton立刻出现,所以我尝试将一个子项添加到一个线程的网格中。经过实验,我得出了这个解决方案:
final GridLayout testGrid = new GridLayout(this);
testGrid.setColumnCount(5);
main.addView(testGrid);
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
new Thread(new Runnable() {
public void run() {
for (int i = 0; i < 100; i++)
MyActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
testGrid.addView(new Button(testGrid.getContext()));
}
});
}
}).start();
}
}, 1);
但我不确定这是个好主意,因为它看起来有点复杂,可能会在某些设备上运行良好。还有更好的建议吗?
答案 0 :(得分:1)
当你必须做这样的事情时,这清楚地表明你做错了什么。如果你真的需要网格中的100个按钮,也许你应该考虑使用GridView而不是GridLayout,并通过一个简单的适配器将按钮加载到视图中。