2013-09-04 2 views
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

Вы не можете инициализировать 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 на фоне Thread, который станет вашей следующей проблемой. Вы должны использовать runOnUiThread() для обновления UI.

+4

также он/она пытается изменить компонент пользовательского интерфейса из фоновой темы. – Emmanuel

+1

@ E. Odebugg Хорошая точка, спасибо. Я отредактировал свой ответ. – codeMagic

Смежные вопросы