2017-04-26 6 views
0

Ich versuche, ein Fragment zu machen, die weg einige Dinge nimmt:Datepicker zeigen wont Datum nach Auswahl

Datum

Gewicht

Höhe

Hinweise

Vorerst I habe mit dem datePicker festgefahren. Ich habe es geschafft, den Dialog erscheinen zu lassen, aber wenn ich ein Datum gewählt habe, schließt er die App. Ich will es das Datum nehme ich gepflückt und zeigen es in diesem Label

: TT/MM/JJ

Versuchte uns auf andere Fragen zu sehen, aber keiner von ihnen hat mir geholfen. Hope you Hier ist das Fragment kann :):

public class NewTracker extends Fragment { 


@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.newtracker, container, false); 

} 


@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    getActivity().setTitle("מעקב חדש"); 
    EditText dateSelect = (EditText)getView().findViewById(R.id.dateSelect); 
    dateSelect.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      DialogFragment picker = new DatePickerFragment(); 
      picker.show(getFragmentManager(), "datePicker"); 
     } 
    }); 

} 


} 

Hier ist das Fragment picker:

Hier ist das Fehlerprotokoll.

Error: 
04-26 15:12:47.022 14245-14245/com.example.matancohen.sg50 E/AndroidRuntime: FATAL EXCEPTION: main 
                      Process: com.example.matancohen.sg50, PID: 14245 
                      java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference 
                       at com.example.matancohen.sg50.DatePickerFragment.onDateSet(DatePickerFragment.java:40) 
                       at android.app.DatePickerDialog.onClick(DatePickerDialog.java:171) 
                       at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:175) 
                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                       at android.os.Looper.loop(Looper.java:154) 
                       at android.app.ActivityThread.main(ActivityThread.java:6692) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358) 

Fehlerprotokoll nach Ahmads Lösung:

E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: com.example.matancohen.sg50, PID: 23173 
                     java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference 
                      at com.example.matancohen.sg50.NewTracker.<init>(NewTracker.java:43) 
                      at com.example.matancohen.sg50.Tracking$1.onClick(Tracking.java:41) 
                      at android.view.View.performClick(View.java:6207) 
                      at android.view.View$PerformClick.run(View.java:23639) 
                      at android.os.Handler.handleCallback(Handler.java:751) 
                      at android.os.Handler.dispatchMessage(Handler.java:95) 
                      at android.os.Looper.loop(Looper.java:154) 
                      at android.app.ActivityThread.main(ActivityThread.java:6692) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358) 

Wenn ich auf OK klicken, nachdem ein Datum wählen es mir ein Force-Absturz was gibt kann ich tun? danke!

+0

Können Sie das Protokoll des Fehlers buchen? –

+0

'getView(). FindViewById (R.id.dateSelect);' Ihr DatePickerDialog muss auf diese Weise 'R.id.dateSelect' enthalten. Hat es? –

+0

Sie erhalten eine Nullpointerexception weil es keine 'R.id.dateSelect' in Ihrem' DatePickerDialog' gibt Ich denke –

Antwort

0

Sie können eine der beiden Möglichkeiten versuchen:

  1. Ihre public class DatePickerFragment extends DialogFragment Klasse Implementierung in Ihrem Fragment bewegen .. NewTracker

Ändern Sie Ihren Code:

public class NewTracker extends Fragment { 


    public static EditText dateSelect; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

     View v = inflater.inflate(R.layout.newtracker, container, false); 
     dateSelect = (EditText) v.findViewById(R.id.dateSelect); 
     dateSelect.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       DialogFragment picker = new DatePickerFragment(); 
       picker.show(getFragmentManager(), "datePicker"); 
      } 
     }); 
     return v; 

    } 


    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     getActivity().setTitle("מעקב חדש"); 
    } 

    public static class DatePickerFragment extends DialogFragment 
      implements DatePickerDialog.OnDateSetListener { 


     @RequiresApi(api = Build.VERSION_CODES.N) 
     @Override 
     public Dialog onCreateDialog(Bundle savedInstanceState) { 
// Use the current date as the default date in the picker 
      final Calendar c = Calendar.getInstance(); 
      int year = c.get(Calendar.YEAR); 
      int month = c.get(Calendar.MONTH); 
      int day = c.get(Calendar.DAY_OF_MONTH); 

// Create a new instance of DatePickerDialog and return it 
      return new DatePickerDialog(getActivity(), this, year, month, day); 
     } 

     @RequiresApi(api = Build.VERSION_CODES.N) 
     @Override 
     public void onDateSet(DatePicker view, int year, int month, int day) { 
      Calendar c = Calendar.getInstance(); 
      c.set(year, month, day); 
      String myFormat = "dd/MM/yy"; //In which you need put here 
      SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US); 
      dateSelect.setText(sdf.format(c.getTime())); 
     } 
    } 
} 
  1. Verwenden Sie eine interface in Ihrem DialogFragment, um t zu benachrichtigen er ruft fragment auf, nachdem das Datum ausgewählt wurde.
+0

Versuchte zuerst und jetzt, wenn ich versuche, zum NewTracker seine Kraft zu schließen, die –

+0

ist, was das Fehlerprotokoll sagt? – rafsanahmad007

+0

Zu lange .. wo zu posten? –

Verwandte Themen