2

また、プログラムで画像を変更できるようにして、リスナーをアタッチし、特定のポイントで画像を変更できるようにしたいです。私はこれの初期段階にあり、自分が持っているビューを設定するのに問題があります。

//inside my activity

LinearLayout mLayout;

//then inside the oncreate

mLayout = (LinearLayout) findViewById(R.id.main1);
setContentView(mLayout);
mLayout.setBackgroundResource(R.drawable.pic);

これはEclipseで正常にコンパイルされますが、実行するとアプリが起動しません。

音楽付きのスライドショーを作成したいと思っています。

以下の解決策を試しましたが、まだエラーが発生しています。

12-06 11:51:11.656:E / AndroidRuntime(238):キャッチされていないハンドラー:キャッチされていない例外のためにスレッドメインが終了します

最終的には、プログラムで背景画像を設定できるスライドショーが必要なので、リスナーを介して背景を設定できるように、ビューのハンドルを取得しようとしています。

ビューres/layout/slider.xmlを設定しました

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main2"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <SeekBar android:id="@+id/seek"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:max="100"
        android:progress="50"
        android:secondaryProgress="75" />

    <TextView android:id="@+id/progress"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <TextView android:id="@+id/tracking"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

SeekBar mSeekBar;
TextView mProgressText;
TextView mTrackingText;
LinearLayout mLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mSeekBar = (SeekBar)findViewById(R.id.seek);
    mSeekBar.setOnSeekBarChangeListener(this);
    mProgressText = (TextView)findViewById(R.id.progress);
    mTrackingText = (TextView)findViewById(R.id.tracking);


    setContentView(R.layout.slider);
    mLayout = (LinearLayout) findViewById(R.id.main2);
    setContentView(mLayout);
    mLayout.setBackgroundResource(R.drawable.mumbai);

    }

    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) {
            mProgressText.setText(progress + " " +
                    getString(R.string.seekbar_from_touch) + "=" + fromTouch);
            //mLayout = (LinearLayout) findViewById(R.id.main1);
            //mLayout.setBackgroundResource(R.drawable.boats);
    }

        public void onStartTrackingTouch(SeekBar seekBar) {
            mTrackingText.setText(getString(R.string.seekbar_tracking_on));
        }

        public void onStopTrackingTouch(SeekBar seekBar) {
            mTrackingText.setText(getString(R.string.seekbar_tracking_off));
        }
}

こんにちはPratickは、以下に書いたように、まだエラーが発生しています。

12-06 13:02:34.074:E / AndroidRuntime(808):キャッチされていないハンドラー:キャッチされていない例外のためにスレッドメインが終了します

私はそれが非常に有益であるとは思わないが。これは、setContentView(mLayout)への2番目の呼び出しをコメントアウトした後です。

デバッガーを実行したところ、mSeekBar.setOnSeekBarChangeListener(this)でエラーが発生しました。

提案に成功せず、新しい戦術を試しました。現在、LayoutInflaterを使用しようとしていますが、AVDで同じエラーが発生し、コードをステップ実行すると、終了しようとしていると思います。 'inflater.inflate'を呼び出す行は、「ソースが見つかりません」というエラーを表示し、デバッガーのコードペインにナビゲートできるウィンドウを表示します。xmlで2つのビューを作成しましたが、保存したときにエラーが発生しませんでした

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class PwdDialogActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        LayoutInflater inflater = (LayoutInflater) getSystemService
            (Context.LAYOUT_INFLATER_SERVICE);
        final View layout = inflater.inflate(R.layout.password_dialog,
                (ViewGroup)findViewById(R.id.root));
        //layout.setBackgroundResource(R.drawable.boats);
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setView(layout);
        builder.setTitle(R.string.app_name);
    }
}

このエラーと前のエラーはコードとは関係がなく、私の設定にもっと関係があるのではないかと思います。しかし、バージョン3で実行するプロジェクトとAVDを作成しました。LayoutInflaterを調べたところ、バージョン1以降のものであると表示されています。

4

2 に答える 2

1

レイアウトを設定せずにsetContentView()IDでオブジェクトを見つけると、常にnullになります。

最初にレイアウトを設定してから、そのレイアウトからオブジェクト ID を取得する必要があります

setContentView(R.layout.yourlayout); // here set the layout where object or control where defined it
mLayout = (LinearLayout) findViewById(R.id.main1);
setContentView(mLayout); // and then you can set that object
于 2011-12-06T11:10:47.097 に答える
0

変化する

mLayout = (LinearLayout) findViewById(R.id.main1);
setContentView(mLayout);

setContentView(R.layout.yourLayoutFile);
mLayout = (LinearLayout) findViewById(R.id.main1);

理由:findViewById現在のコンテンツビューで動作します。コンテンツビューfindViewByIdを設定する前は、常にnullが返されます。したがって、投稿した最後の行でNullPointerExceptionが発生します。

于 2011-12-06T11:04:52.353 に答える