1

次のコードを本からコピーしました。アプリを実行すると、起動に失敗します。

問題のある行はaboutButton.setOnClickListener(this);です。ノックアウトすると、アプリが動作します。

手がかりはありますか?

ありがとう。

G.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    View aboutButton = findViewById(R.id.main_about_button);
    aboutButton.setOnClickListener(this);
    setContentView(R.layout.activity_main);
}


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:gravity="center"
    tools:context=".MainMenu"  
    >

    <TextView 
        android:id="@+id/welcome_title"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textStyle="bold"
        android:textSize="25sp"
        android:text="@string/welcome_title"
        />

    <Button
        android:id="@+id/search_button"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/search_button"
        />

    <Button
        android:id="@+id/new_button"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/new_button"
        />

    <Button
        android:id="@+id/help_button"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/help_button"
        />

    <Button
        android:id="@+id/exit_button"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/exit_button"
        />

   <Button 
        android:id="@+id/main_about_button"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/exit_button"
        android:layout_alignLeft="@+id/exit_button"
        android:text="@string/main_about_button"
        android:clickable="true"
        />

</LinearLayout>
4

3 に答える 3

2

aboutButtonですnull。を膨らませるまで初期化できませんlayout。に変更します

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);   // Switch these two lines
    View aboutButton = findViewById(R.id.main_about_button);
    aboutButton.setOnClickListener(this);

}

あなたがあなたのViews中に存在するlayoutことを意味します。つまり、を使用してまたはを呼び出して、をnull膨らませる前にそれらを初期化しようとすると、それらの関数を呼び出そうとしたり、layoutlayout inflatersetContentView()NPElistener

于 2013-08-05T16:11:52.283 に答える
1

seContentViewコマンドの後にリスナー ステートメントを配置する必要がありました。それはそれを修正しました。

私の推測では、setContentView はレイアウトからすべての変数と ID をインポートします。そしてfindViewByIdはnullポインタか何かを返しました。

誰かが私の推測を確認できるなら、私はそれを感謝します。

于 2013-08-05T16:54:44.940 に答える
0

aboutButton を Button として宣言することをお勧めします。これを試して:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button aboutButton = (Button) findViewById(R.id.main_about_button);
    aboutButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // Do something
        }
    });

}

それが役立つことを願っています!

于 2013-08-05T16:25:23.833 に答える