0

Alert DialogNumber Pickerで開こうとすると奇妙な問題が発生します。 ImagesActivityがButtonClickListenerが置かれたクラスで、Nullポインタ例外の警告ダイアログが表示されます(Android 6.0のみ)

private class ButtonClickListener implements View.OnClickListener { 

     @Override 
     public void onClick(View v) { 
      AlertDialog.Builder builder = new AlertDialog.Builder(ImagesActivity.this); 
      AlertDialog dialog; 
      final NumberPicker np = new NumberPicker(ImagesActivity.this); 
      np.setMinValue(1); 
      np.setMaxValue(dataModel.getPagesNumber()); 
      np.setValue(currentPage); 
      builder.setView(np); 
      builder.setTitle(R.string.jump_title); 
      builder.setPositiveButton(R.string.jump_ok, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        pager.setCurrentItem(np.getValue() - 1); 
        dialog.dismiss(); 
       } 
      }); 
      builder.setNegativeButton(R.string.jump_cancel, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        dialog.dismiss(); 
       } 
      }); 

      dialog = builder.create(); 
      dialog.show(); 
     } 
    } 

:私はそれにbuttonlistenerとセットキーを押した後、それを呼び出す必要があります。これはViewPagerを表示し、NumberPickerを使用して選択したページにスクロールする必要があります。

それは私の古い携帯電話で正常に動作しますが、私はAndroid 6上でそれを起動しようとすると、私はそのメッセージエラー取得:

のjava.lang.NullPointerException:仮想メソッド を起動しようと「アンドロイドを。view.View android.view.View.FindViewById(int) 'nullの場合 オブジェクト参照 at com.android.internal.app.AlertController.setupView(AlertController.java:489) at com.android.internal.app .AlertController.installContent(AlertController.java:234) android.app.AlertDialog.onCreate(Al (Dialog.java:394) android.app.DialogFragment.onStart(DialogFragment。)は、android.app.DialogFragment.onStartにあります。 (FragmentManager.java:2244) (android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1002)) (android.app.FragmentManagerImpl.moveToState(FragmentManager.java:490) )は、 1148) android.app.FragmentManagerImpl $ 1.runでandroid.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1535)でandroid.app.BackStackRecord.run(BackStackRecord.java:793) で (FragmentManager.java:482 )android.os.Handler.handleCallback(Handler.java:739) android.os.Handler.dispatchMessage(Handler.java:95)の android.os.Looper.loop(Looper.java:148) android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(ネイティブメソッド) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:616)

何が原因で起こり得るのですか?そして、どうすれば修正できますか?

+0

私はsetupView()コードを持っていません。それはAndroidライブラリ – michalsol

答えて

2

でこれを使用しようとすることができます。

私はおそらく、我々は標準/サポートのバージョンを使用してについて十分気をつけていないときに問題が発生しマシュマロバージョンからの変更のいくつかの種類がありました

import android.support.v7.app.alertdialog; 

import android.app.alertdialog; 

を変更する必要がありましたのライブラリ。

0

NumberPickerをLinearLayoutまたはRelativeLayout内に追加し、ダイアログビューをそのLinearLayoutまたはRelativeLayoutに設定してみてください。

編集: あなたはレイアウトXMLの内側にあなたのNumberPickerを持っており、それを膨らませる、と私はこの問題を解決するために管理setviewコマンドメソッド呼び出し

+0

によって提供されていると思います。私はまだエラーメッセージが表示されます。 – michalsol

+0

builder.setView(np)をコメント化する場合。あなたはまだエラーがありますか? – mmcoder10

+0

あなたの問題を解決するかどうか私の編集を確認してください。 – mmcoder10

2

これはalertDialogStyleを台無しにしてしまったことを意味します - それはそこからレイアウトres IDを読み込み、正しいレイアウトをロードしないとNPEになります。