我研究了所有可能的答案并找到了应该有用的东西:
int[] tabelazdjec={R.drawable.pic2,R.drawable.pic3};
LinearLayout mylay=(LinearLayout)findViewById(R.id.mylay);
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.yess);
Thread timer = new Thread(){
public void run()
{
for(int i=0;i<tabelazdjec.length;i++)
{
try
{
mylay.setBackgroundResource(tabelazdjec[i]);
sleep(500);
}
catch(Exception e)
{
e.printStackTrace();
}
}}
};
timer.start();
没有。错误出现在我声明LinearLayout变量的第二行。如果我将声明移动到try {} catch {}部分,应用程序会运行,但try {}不会执行,所以它肯定是这个确切的行。 xml文件如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:id="@+id/mylay"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/pic1" >
</LinearLayout>
很抱歉,如果这个问题看似微不足道,我花了几个小时盯着那条线,发现它没有任何问题。也许我是瞎子......
答案 0 :(得分:4)
在您View
充气之前,您无法初始化layout
。将LinearLayout
初始化移至setContentView()
LinearLayout mylay;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.yess);
mylay=(LinearLayout)findViewById(R.id.mylay);
Thread timer = new Thread(){
如果您在Views
充气null
之前尝试初始化layout
,则setContentView()
会返回UI
。
此外,正如E.Odebugg在评论中指出的那样,您正在尝试更新后台Thread
中的runOnUiThread()
元素,这将是您的下一个问题。您需要使用UI
来更新{{1}}。