0

menu.setOnClickListener(new View.OnClickListener(){の代わりにNullポインター例外の問題を回復する方法、別のアクティビティ(ページについて)を開く必要があることを押すと、imageview(menu)がありますが、ここではimageviewのOnClickで、上記のエラーが発生し、アプリが強制終了します。コードは次のとおりです。

public class About extends Activity {
LinearLayout line1, line2;
ImageView menu;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_about);
menu = (ImageView)findViewById(R.id.menu);
    menu.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
           menu.setVisibility(View.VISIBLE);
          // TODO Auto-generated method stub
        line1.setVisibility(View.VISIBLE);
        if (line2.getVisibility() == View.INVISIBLE || line2.getVisibility() == View.GONE) {
            line2.setVisibility(View.VISIBLE); } 
        else { 
            line2.setVisibility(View.INVISIBLE); 
        } 
          }
      });

          ImageView about = (ImageView) findViewById(R.id.about);
          about.setOnClickListener(new View.OnClickListener() {
             public void onClick(View v){
                startActivity(new Intent(About.this, About.class));
             }
              });

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:background="@color/black" >

<LinearLayout
    android:id="@+id/ll1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@color/black" 
   android:layout_alignParentTop="true"
    android:layout_alignParentRight="true">

      <ImageView
    android:id="@+id/menu"
    android:layout_width="50dp"
    android:layout_height="50dp"

    android:src="@drawable/menu" />
</LinearLayout>

<LinearLayout
    android:id="@+id/ll2"
    android:layout_width="199dp"
    android:layout_height="wrap_content"
    android:background="@color/black" 
    android:layout_toRightOf="@+id/ll1"
    android:visibility="gone"
    >


  <ImageView
    android:id="@+id/about"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:layout_above="@+id/textView1"
    android:layout_toLeftOf="@+id/jobs"
    android:src="@drawable/about" />

  </LinearLayout>


<TextView
    android:id="@+id/textView3"
    android:layout_width="match_parent"
    android:layout_height="50dip"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:background="@color/white" 
    android:textColor="@color/white"/>

4

6 に答える 6

3

imageviewを初期化していないため、NullPointerExceptionが発生します。最初に実行してください。

 ImageView menu=(ImageView)findViewById(R.id.menu);

onClickListenerを画像ビューに設定する前にこの行を書いてください。これで完了です。お役に立てば幸いです。

于 2013-02-04T06:19:24.153 に答える
2

リスナーを設定する前に、メニュー変数を適切に初期化していない必要があります

menu = (ImageView)findViewById(id.menu);

次に、リッスンラインを記述します。

于 2013-02-04T06:22:54.177 に答える
2

私が推測したように、メニューをインスタンス変数(クラスの最上位)として宣言しましたが、ローカル変数としてインスタンス化することはありません。行を追加します

menu = (ImageView)findViewById(R.id.menu) 

onCreate()メソッドの上部で、OnClickListenerを設定する前に、それが機能します。

インスタンス変数の宣言(実行済み)と実際の初期化には違いがあります。この意味で、通常のJavaクラスのコンストラクターのようにonCreate()メソッドを見ることができます。クラスの最上位で変数を宣言するだけでは不十分です。実際のオブジェクトの変数として初期化する必要があります。

これは些細なことのように聞こえるかもしれませんが、そうではないと私は信じています。私が最初にJavaを学んだとき、この概念に頭を悩ませる前に、私はあなたが今持っているのと同じ種類のエラーについて画面で叫んで何時間も費やしました。

于 2013-02-04T06:47:51.207 に答える
1

実行したいアクティビティではなく、実行中のアクティビティのコンテキストを渡す必要があります。問題はAbout.thisです。現在のアクティビティのコンテキストに置き換えてください。

startActivity(new Intent(About.this, About.class));
于 2013-02-04T06:17:50.253 に答える
0

メニューの最初のインスタンス化をインスタンス化していません。

同じアクティビティで同じクラスを呼び出している場合、次のコードを次のように変更します

  startActivity(new Intent(About.this, About.class));

 startActivity(new Intent(getApplicationContext(), NewClass.class));

また

 startActivity(new Intent(CurrentClass.this, NewClass.class));
于 2013-02-04T06:21:06.510 に答える
0

同様の問題がありました。findViewById()で使用したxml IDは、その時点でアクティブだったものとは異なるページレイアウトからのものであることがわかりました。

警告はありません。[保存]などの一般的なボタンに適切な命名規則があることを確認する必要があります。

于 2014-03-09T06:45:40.613 に答える