如何更改背景图片?

时间:2013-09-04 19:05:57

标签: java android

我研究了所有可能的答案并找到了应该有用的东西:

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>

很抱歉,如果这个问题看似微不足道,我花了几个小时盯着那条线,发现它没有任何问题。也许我是瞎子......

1 个答案:

答案 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}}。