我有这段代码:
package com.example.helloandroid;
import java.util.Random;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TableLayout;
import android.widget.TableRow;
public class HelloAndroid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
for(int i = 0; i < 6; i++) {
TableLayout tl = (TableLayout) findViewById(R.id.T);
TableRow tr = (TableRow) tl.getChildAt(i);
for(int j = 0; j < 6; j++) {
ImageView img = (ImageView) tr.getChildAt(j);
Random randomGenerator = new Random();
int randomInt = randomGenerator.nextInt(2);
if (randomInt == 1) {
img.setImageResource(R.drawable.w);
}
else {
img.setImageResource(R.drawable.b);
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
我希望在更改图像时,它会在屏幕上更改。此代码只是冻结,直到所有图像都被更改。为什么呢?
答案 0 :(得分:1)
尝试使用AsynchTask,因为所有代码都在主线程上运行,所以它必须在视图准备好之前完成所有循环(解释冻结)。
答案 1 :(得分:0)
我修改了您的代码使用尝试下面的一个
public class HelloAndroid extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new Thread(new Runnable()
{
@Override
public void run()
{
for (int i = 0; i < 6; i++)
{
TableLayout tl = (TableLayout) findViewById(R.id.T);
TableRow tr = (TableRow) tl.getChildAt(i);
for (int j = 0; j < 6; j++)
{
ImageView img = (ImageView) tr.getChildAt(j);
Random randomGenerator = new Random();
int randomInt = randomGenerator.nextInt(2);
runOnUiThread(new Runnable()
{
@Override
public void run()
{
if (randomInt == 1)
{
img.setImageResource(R.drawable.w);
}
else
{
img.setImageResource(R.drawable.b);
}
}
});
try
{
Thread.sleep(100);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}).start();
}
}