2016-08-19 2 views
0

Итак, идея состоит в том, чтобы позволить пользователю щелкнуть кнопку (или текстовое изображение), отобразить дату, выбрать дату, сохранить дату в базе данных (в списке TODO) и отображать выбранную дату через тост для пользователя (или в текстовом виде, если я беру этот маршрут). Все это на фрагменте активности с вкладкамиПочему приложение продолжает сбой после нажатия кнопки, чтобы показать datepicker

На данный момент я только что нажал кнопку, и когда я нажимаю на нее, приложение просто падает. Catlog показывает следующее

08-19 09:50:57.422 21472-21472/com.example.alibasmaci.maralapplication E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.example.alibasmaci.maralapplication, PID: 21472 
java.lang.NullPointerException 
    at com.example.alibasmaci.maralapplication.OneWayFragment.showDialogOnButtonClick(OneWayFragment.java:49) 
    at com.example.alibasmaci.maralapplication.OneWayFragment.onCreateView(OneWayFragment.java:93) 

Теперь класс Java в вопросе здесь:

 package com.example.alibasmaci.maralapplication; 


    import android.app.DatePickerDialog; 
    import android.app.Dialog; 
    import android.os.Bundle; 
    import android.support.v4.app.Fragment; 
    import android.view.LayoutInflater; 
    import android.view.View; 
    import android.view.ViewGroup; 
    import android.widget.ArrayAdapter; 
    import android.widget.AutoCompleteTextView; 
    import android.widget.Button; 
    import android.widget.DatePicker; 
    import android.widget.EditText; 
    import android.widget.Spinner; 
    import android.widget.Toast; 


    /** 
    * A simple {@link Fragment} subclass. 
    */ 

    public class OneWayFragment extends Fragment { 
    Spinner spinDeparture; 
    Spinner spinDestination; 
    Button btnDeparture; 
    EditText etDepartureDate; 
    int year_x, month_x, day_x; 
    static final int DIALOG_ID = 0; 


    String[] cities = { 
      "Ottawa", 
      "Montreal", 
      "Toronto" 
    }; 

    public static OneWayFragment newInstance() { 
     OneWayFragment fragment = new OneWayFragment(); 
     return fragment; 
    } 

    public OneWayFragment() { 
     // Required empty public constructor 
    } 


    public void showDialogOnButtonClick(){ 
     btnDeparture = (Button)getActivity().findViewById(R.id.btnDepartureDate); 
     btnDeparture.setOnClickListener(
       new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
         getActivity().showDialog(DIALOG_ID); 
        } 
       } 
     ); 
    } 

    protected Dialog onCreateDialog(int id){ 
     if (id == DIALOG_ID) 
      return new DatePickerDialog(getActivity(),dPickerListener, year_x, month_x, day_x); 
     return null; 
    } 

     private DatePickerDialog.OnDateSetListener dPickerListener = new DatePickerDialog.OnDateSetListener() { 
      @Override 
      public void onDateSet(DatePicker datePicker, int year, int monthOfYear, int dayOfMonth) { 
       year_x = year; 
       month_x = monthOfYear; 
       day_x = dayOfMonth; 
       Toast.makeText(getActivity(), year_x+"/"+month_x+"/"+day_x,Toast.LENGTH_LONG).show(); 
      } 
     }; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View rootView = inflater.inflate(R.layout.fragment_one_way, container, false); 

     // Spinner to display departure points 
     spinDeparture = (Spinner) rootView.findViewById(R.id.spinnerDeparture); 
     ArrayAdapter adapterDeparture = new ArrayAdapter(getActivity(),android.R.layout.simple_spinner_item,cities); 
     spinDeparture.setAdapter(adapterDeparture); 

     // Spinner to display destinations 
     spinDestination = (Spinner) rootView.findViewById(R.id.spinnerDestination); 
     ArrayAdapter adapterDestination = new ArrayAdapter(getActivity(),android.R.layout.simple_spinner_item,cities); 
     spinDeparture.setAdapter(adapterDestination); 

     // Show date picker when departure button is clicked 


     showDialogOnButtonClick(); 

     return rootView; 


    } 


} 

линия, к которой ошибка имеет в виду здесь:

public void showDialogOnButtonClick() { 

Любые мысли о почему это рушится?

+0

Является ли ваш фрагмент привязанным к любой деятельности? И, пожалуйста, отправьте точную строку аварии. – sumandas

+0

Да до того, как я добавил код, относящийся к дате, операция с вкладками смогла пронести между двумя разными фрагментами. Точная строка в соответствии с logcat - это строка 49, которую я показал ранее. Он также показывает и ошибку, когда метод вызывается в строке 93 // Показывать выбор даты при нажатии кнопки выхода showDialogOnButtonClick(); –

+0

Offtop: почему ваш фрагмент настройки нажал кнопку прослушивания кнопки в действии? Это довольно странно. –

ответ

0

Попробуйте это:

Переместить это: btnDeparture = (Button)rootView.findViewById(R.id.btnDepartureDate);

к onCreateView() {...} после того, как надуть

и OnClick попробовать это:

public void showDialogOnButtonClick(){ 
     btnDeparture.setOnClickListener(
       new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
         view.getContext().showDialog(DIALOG_ID); 
        } 
       } 
     ); 
    } 

Try Это.

+0

не могут решить метод 'showDialog (int) error –

+0

Ahh, я думаю вы смешивали Фрагмент с диалогом и DialogFragment. Попробуйте эту ссылку, http://stackoverflow.com/questions/12818342/dialog-oncreatedialogint-dialogid/12818534#12818534. он сказал бы, что вы должны определить showDialog. И если не ошибаюсь, я не вижу его в вашем коде. – sumandas

Смежные вопросы