ユーザーがボタン(またはテキストビュー)をクリックしたり、日付ピッカーを表示したり、日付を選択したり、日付をデータベースに保存したり(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)
を示しなぜこれはクラッシュしていますか?
あなたのフラグメントはアクティビティに添付されていますか?そして、クラッシュの正確なラインを投稿してください。 – sumandas
はい、datepickerに関するコードを追加する前に、タブ付きアクティビティは2つの異なるフラグメント間でスワイプできました。 logcatによる正確な行は、前に示した49行目です。また、93行目でメソッドが呼び出されたときにエラーが表示されます。 //出発ボタンがクリックされたときに日付ピッカーを表示します。 showDialogOnButtonClick(); –
Offtop:あなたのフラグメント設定が、アクティビティのボタンのリスナーをクリックしているのはなぜですか?それはかなり奇妙です。 –