0

Ich habe ein seltsames Problem, wenn ich versuche, Alert Dialog mit Number Picker darin zu öffnen. Es sollte aufgerufen werden, nachdem ich ein button mit listener Satz zu, dass drücken:Null-Zeiger-Ausnahme bei Alert Dialog anzeigen, nur auf 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(); 
     } 
    } 

ImagesActivity Klasse, wo ButtonClickListener platziert wird. Es zeigt ViewPager an, die zu der Seite gescrollt werden sollte, die unter NumberPicker ausgewählt wurde.

Es funktioniert gut auf meinem älteren Handys, aber wenn ich versuche, es zu starten auf Android 6 I erhalten, die Nachricht Fehler:

java.lang.NullPointerException: Versuch android virtuelle Methode aufrufen‘ .view.View android.view.View.findViewById (int) 'auf einer Null Objektreferenz bei com.android.internal.app.AlertController.setupView (AlertController.java:489) bei com.android.internal.app .AlertController.installContent (AlertController.java:234) bei android.app.AlertDialog.onCreate (Al erdeDialog.java:423) bei android.app.Dialog.dispatchOnCreate (Dialog.java:394) bei android.app.Dialog.show (Dialog.java:295) bei android.app.DialogFragment.onStart (DialogFragment. java: 490) bei android.app.Fragment.performStart (Fragment.java:2244) bei android.app.FragmentManagerImpl.moveToState (FragmentManager.java:1002) bei android.app.FragmentManagerImpl.moveToState (FragmentManager.java: 1148) bei android.app.BackStackRecord.run (BackStackRecord.java:793) bei android.app.FragmentManagerImpl.execPendingActions (FragmentManager.java:1535) bei android.app.FragmentManagerImpl $ 1.run (FragmentManager.java:482) bei android.os.Handler.handleCallback (Handler.java:739) bei android.os.Handler.dispatchMessage (Handler.java:95) bei android.os.Looper.loop (Looper.java:148) bei android.app.ActivityThread.main (ActivityThread.java:5417) bei java.lang.reflect.Method.invoke (Native Methode) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) bei com.android.internal.os.ZygoteInit.main (ZygoteInit .java: 616)

Wissen Sie, woran es liegen kann? Und wie kann ich es reparieren?

+0

Ich habe keine setupView() Code, ich denke, es wird von Android Library – michalsol

Antwort

2

ich es geschaffen, um dieses Problem zu lösen.

hatte ich

import android.app.alertdialog; 

zu

import android.support.v7.app.alertdialog; 

Wahrscheinlich gibt eine Art von Veränderung zu ändern, da Eibisch Version war, das Problem verursacht, wenn wir nicht vorsichtig genug über die Verwendung von Standard/Support-Versionen sind von Bibliotheken.

0

Versuchen Sie, den NumberPicker in einem LinearLayout oder RelativeLayout hinzuzufügen und dann die Dialogansicht auf dieses LinearLayout oder RelativeLayout zu setzen.

Edit: Sie können versuchen, Ihre Number in einem Layout xml und aufblasen, es zu haben, und diesen Ruf an dem setView Methode

+0

zur Verfügung gestellt Leider hat es nicht geholfen. Ich bekomme immer noch die Fehlermeldung. – michalsol

+0

Wenn Sie die builder.setView (np) auskommentieren; hast du noch den fehler? – mmcoder10

+0

Bitte überprüfen Sie meine Bearbeitung, um zu sehen, ob sie Ihr Problem löst. – mmcoder10

2

Das bedeutet, Sie haben alertDialogStyle durcheinander gebracht - es liest die Layout Res ID von dort und wenn es nicht das richtige Layout lädt, wird es NPE.