2016-11-18 8 views
-1

Ich versuche, ein DatePicker-Dialogfeld zu erstellen, das geöffnet wird, wenn eine Schaltfläche in meinem Dialogfeld aus einem benutzerdefinierten Layout gedrückt wird. Ich habe viele verschiedene Code-Konfigurationen ausprobiert und das Ergebnis, wenn die Taste gedrückt wird, ist entweder eine NullPointerException oder die Schaltfläche tut nichts. Ich bin ziemlich neu in Android-Programmierung, aber meine beste Vermutung ist, dass findViewById nicht in der Lage ist, die Schaltfläche zu finden, weil ich in einem Fragment arbeite und die Inhaltsansicht nicht angegeben ist. Ich habe versucht, setContentView zu verwenden, aber das hat nicht funktioniert. Hoffentlich kann jemand das herausfinden und mich wissen lassen, wie sie es gemacht haben!NullPointerException beim Festlegen von onClickListener in einem Fragment

NewTaskDialogFragment.java:

public class NewTaskDialogFragment extends DialogFragment implements 
     android.view.View.OnClickListener { 
    public int mYear, mMonth, mDay; 
    public static final int DIALOG_ID = 0; 
    private Button btn; 
    private View dialogView; 


    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     Context context = getActivity(); 


     AlertDialog.Builder builder = new AlertDialog.Builder(context); 


     LayoutInflater inflater = LayoutInflater.from(context); 
     dialogView= inflater.inflate(R.layout.new_task_dialog, null); 
     builder.setView(dialogView) 

     ; 
     btn =(Button) dialogView.findViewById(R.id.datePickerDialogButton); 
     showDialogOnButtonClick(); 

     return builder.create(); 
    } 
    public void showDialogOnButtonClick(){ 



     btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       getActivity().showDialog(DIALOG_ID); 
      } 
     }); 
    } 

    private DatePickerDialog.OnDateSetListener dpickerListener 
      = new DatePickerDialog.OnDateSetListener() { 
     @Override 
     public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
      TextView dateDisplay = (TextView) getActivity().findViewById(R.id.dateDisplayBox); 

      mYear = year; 
      mMonth = monthOfYear; 
      mDay = dayOfMonth; 
      dateDisplay.setText(mYear + mMonth + mDay); 
     } 
    }; 

    @Override 
    protected Dialog onCreateDialog(int id){ 
     if(id == DIALOG_ID) { 
      return new DatePickerDialog(getActivity(), dpickerListener , mYear, mMonth, mDay); 
     }else{ 
      return null; 
     } 
    } 


    @Override 
    public void onClick(View view) { 

    } 
} 
+0

Liefert Ihre 'getActivity()' ** ** **? –

Antwort

0
import android.support.v4.app.Fragment; 

public class FooFragment extends Fragment { 
    // The onCreateView method is called when Fragment should create its View object hierarchy, 
    // either dynamically or via XML layout inflation. 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) { 
     // Defines the xml file for the fragment 
     return inflater.inflate(R.layout.fragment_foo, parent, false); 
    } 

    // This event is triggered soon after onCreateView(). 
    // Any view setup should occur here. E.g., view lookups and attaching view listeners. 
    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
     // Setup any handles to view objects here 
     // EditText etFoo = (EditText) view.findViewById(R.id.etFoo); 
    } 
} 
-1

Sie haben den Klick Zuhörer in der Methode showDialogOnButtonClick registriert, die in dem Verfahren onClick Sie getActivity Aktion wahrscheinlich dazu führen, die NullPointException haben, können Sie ein Protokoll drucken! Stellen Sie vor getActivity sicher, dass Ihr Fragment an die Aktivität angehängt ist und aktiv ist!

1

Versuchen Hinzufügen btn.setOnClickListener(new View.OnClickListener() {} nur unter der Schaltfläche Initialisierung in public Dialog onCreateDialog(Bundle savedInstanceState) {}, anstatt es von der Funktion showDialogOnButtonClick() aufrufen. Der Aufruf von der Funktion kann getActivity() als null zurückgeben. Hoffe das wird dir helfen.

Verwandte Themen