0

すべてが正常に見えますが、ボタンを押してビューを変更しようとすると、エラーが発生します。コードは次のとおりです。

    package com.example.testy;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.ViewFlipper;

public class MainActivity extends Activity {

    ViewFlipper flipper;

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        flipper = (ViewFlipper) findViewById(R.id.viewFlipper1);
        setContentView(R.layout.activity_main);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    public void clcik(View v) {
        flipper.showNext();
    }

}

そして、これが私のXMLです。

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="top" >

    <ViewFlipper
        android:id="@+id/viewFlipper1"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="click"
            android:text="Button!!" />

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView!!" />
    </ViewFlipper>

</RelativeLayout>

誰もがこのコードで何が間違っている可能性があるか知っていますか?回答ありがとうございます!

4

2 に答える 2

1

おそらく、メソッドの名前をに固定する必要がありますclickか?

 public void **clcik**(View v) {
        flipper.showNext();
    }

アクティビティコードのスペル()が間違っているため、Androidがメソッドclcikを見つけられないため、例外が発生する可能性があります。click

そして@yugidroidの答えのおかげで、私はあなたのコードにもう1つのエラーを見つけました:

public void onCreate(Bundle savedInstanceState){

    super.onCreate(savedInstanceState);
    flipper = (ViewFlipper) findViewById(R.id.viewFlipper1);
    setContentView(R.layout.activity_main);

}

findViewByIdビューがある前に呼び出します(への呼び出しsetContentView)。そのため、NullPointExceptionが発生します。

super.onCreateメソッドの最初の行を呼び出すことをお勧めしますonCreate()。それがGoogleが行っていることです

レイアウトでのクリックリスナーの設定、またはリスナーの作成とコードでの設定について。まあ、大きな違いはありませんが、後者は前者がリフレクションを使用するので確かに高速ですが、メソッドを呼び出すよりもコストが高くなります。

于 2012-08-07T00:04:00.623 に答える
0

まず第一に、あなたがsetContentView(R.layout.activity_main);スーパーの後に電話することを確認してください、それは良い習慣です。

問題は、設定しandroid:onClick="click"たものの、Javaで間違ったメソッドを参照していることです(clcik存在しません)。

xmlではなく、アクティビティでリスナーを宣言して設定することをお勧めします。

于 2012-08-07T00:09:43.540 に答える