0

我研究了所有可能的答案,发现了一些可行的方法:

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>

抱歉,如果这个问题看起来微不足道,我已经花了几个小时盯着那条线,找不到任何问题。可能是我瞎了...

4

1 回答 1

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将返回。nulllayoutsetContentView()

此外,正如 E.Odebugg 在评论中指出的那样,您正在尝试更新UI背景中的元素,Thread这将是您的下一个问题。您需要使用runOnUiThread()来更新UI.

于 2013-09-04T19:07:18.803 回答