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 変数を宣言する 2 行目に表示されます。宣言を 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を膨らませるまで、 a を初期化することはできませんlayoutLinearLayout初期化を下に移動します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 に答える