2016-08-19 7 views
0

ユーザーがボタン(またはテキストビュー)をクリックしたり、日付ピッカーを表示したり、日付を選択したり、日付をデータベースに保存したり(TODOリスト)選択した日付をトーストでユーザーに表示します(または、そのルートを取る場合はテキストビュー)。これはすべてタブ付きアクティビティの一部ですボタンをクリックして日付ピッカーを表示した後にアプリがクラッシュする理由

今のところ私はボタンを使用していますが、クリックするとアプリがクラッシュします。

 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() { 

上の任意の考えcatlogは、問題のJavaクラスがここにある今、次の

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) 

を示しなぜこれはクラッシュしていますか?

+0

あなたのフラグメントはアクティビティに添付されていますか?そして、クラッシュの正確なラインを投稿してください。 – sumandas

+0

はい、datepickerに関するコードを追加する前に、タブ付きアクティビティは2つの異なるフラグメント間でスワイプできました。 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); 
        } 
       } 
     ); 
    } 

てみてくださいそれ。

+0

メソッド 'showDialog(int)エラーを解決できませんが表示されます –

+0

ああ、私は思いますDialogとDialogFragmentを持つフラグメントを混在させました。このリンクを試してみてください。http://stackoverflow.com/questions/12818342/dialog-oncreatedialogint-dialogid/12818534#12818534つまり、showDialogを定義しなければなりません。誤解されなければ、あなたのコードで定義されているとは思えません。 – sumandas

関連する問題