0

Androidにオプションメニューがあります。今では5つのオプションがあります。1つのボタンを押すとトーストが表示され、別のボタンを押すとアクティビティが開始されます。それはすべてうまくいきます。次に、別のオプションを追加します。エミュレーターでそのオプションを選択すると、テキストを変更し、imageviewの画像リソースを変更し、一部のテキストビューの可視性を別のxmlでView.GONEに設定してから、そのxmlファイルをレイアウトするアクティビティを開始します。私は次のことをします:

    ...Previous menu options
    case R.id.sample:
    TextView tv1 = (TextView) findViewById(R.id.tv1);
    tv1.setText("This is the new text");
    tv1.setVisibility(View.GONE);
    ImageView iv = (ImageView) findViewById(R.id.iv1);
    iv.setImageResource(R.drawable.image);
    return true;
    following menu options...

エミュレーターで実行し、オプションメニューでこのオプションをクリックすると、「アプリケーション例(プロセスcom.android.example)が予期せず停止しました。もう一度やり直してください。」と表示されます。私はすでにプロジェクトをクリーンにしましたが、それも役に立ちません。logcatは言う:

05-25 19:25:19.357: E/AndroidRuntime(283): FATAL EXCEPTION: main
05-25 19:25:19.357: E/AndroidRuntime(283): java.lang.NullPointerException
05-25 19:25:19.357: E/AndroidRuntime(283):  at com.android.example.SampleOption.onOptionsItemSelected(Sample.java:349)
05-25 19:25:19.357: E/AndroidRuntime(283):  at android.app.Activity.onMenuItemSelected(Activity.java:2195)
05-25 19:25:19.357: E/AndroidRuntime(283):  at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:730)
05-25 19:25:19.357: E/AndroidRuntime(283):  at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:143)
05-25 19:25:19.357: E/AndroidRuntime(283):  at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:855)
05-25 19:25:19.357: E/AndroidRuntime(283):  at com.android.internal.view.menu.IconMenuView.invokeItem(IconMenuView.java:532)
05-25 19:25:19.357: E/AndroidRuntime(283):  at com.android.internal.view.menu.IconMenuItemView.performClick(IconMenuItemView.java:122)
05-25 19:25:19.357: E/AndroidRuntime(283):  at android.view.View$PerformClick.run(View.java:8816)
05-25 19:25:19.357: E/AndroidRuntime(283):  at android.os.Handler.handleCallback(Handler.java:587)
05-25 19:25:19.357: E/AndroidRuntime(283):  at android.os.Handler.dispatchMessage(Handler.java:92)
05-25 19:25:19.357: E/AndroidRuntime(283):  at android.os.Looper.loop(Looper.java:123)
05-25 19:25:19.357: E/AndroidRuntime(283):  at android.app.ActivityThread.main(ActivityThread.java:4627)
05-25 19:25:19.357: E/AndroidRuntime(283):  at java.lang.reflect.Method.invokeNative(Native Method)
05-25 19:25:19.357: E/AndroidRuntime(283):  at java.lang.reflect.Method.invoke(Method.java:521)
05-25 19:25:19.357: E/AndroidRuntime(283):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-25 19:25:19.357: E/AndroidRuntime(283):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-25 19:25:19.357: E/AndroidRuntime(283):  at dalvik.system.NativeStart.main(Native Method)
05-25 19:25:23.127: I/Process(283): Sending signal. PID: 283 SIG: 9

誰かが私が間違っていることを知っていますか?

よろしくお願いします。

4

2 に答える 2

1

...そして、いくつかのテキストビューの可視性を別のxmlのView.GONEに設定してから、そのxmlファイルをレイアウトするアクティビティを開始します。

あなたはこれを行うことはできません。他の'sでTextView tv1を検索するとActivity(単に現在の'sレイアウトでtv1を検索します)、レイアウトは見つかりません。これにより、tv1がになります。テキストを設定しようとすると、がスローされます。findViewByIdTextView ActivityTextViewnullNullPointerException

あなたが何をしようとしているのか理解できたら、新しいものを開始するために使用するにboolean値を渡し、そのメソッドでその値の値をからチェックしてから、目的のの可視性を変更します。IntentActivityActivityonCreatebooleanIntentViews

于 2012-05-25T20:14:32.250 に答える
0

変化する

TextView tv = (TextView) findViewById(R.id.tv1);

TextView tv1 = (TextView) findViewById(R.id.tv1);

編集:

それでも問題が解決しない場合は、次のシナリオを検討してください。

  1. コードが正しい場合は、クラスR.javaを削除して、Eclipseに再生成させてみてください。

  2. コードが正しくない場合は、すべてのID(つまりR.id.tv1R.id.tv2など)が適切なXMLファイルで定義されていることを再確認することをお勧めします。IDが見つからない場合、これは結果になりNullPointerExceptionます。

于 2012-05-25T19:51:11.880 に答える