문제

가 editText,어디를 클릭할 때,그 날짜에 대화 상자가 나타나며면 날짜가 설정된 날짜에 나타나야 합니다 editText 필드입니다.간단하지만,충분히 나 can't find 왜 얻을 nullPointer 예외는 아니다.나는 시도는 여러 가지 방법으로 변경 내 코드는 많은,하지만 아무것도 작동하지 않습니다.여기에서 그것은 하나의 개념 나의 코드:

시작 클래스:

public class Start extends FragmentActivity {

int year;
int month;
int day;

static final int DATE_DIALOG_ID = 999;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_start);
    EditText editText = (EditText) findViewById(R.id.etDepDate);
    editText.setText("date");

}

public void showDatePickerDialog(View v) {
    DialogFragment newFragment = new DatePick();
    newFragment.show(getFragmentManager(), "datepicker");

}

}

DatePick 클래스:

 public class DatePick extends DialogFragment implements
    DatePickerDialog.OnDateSetListener {
EditText editText;

@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);
}

public void onDateSet(DatePicker view, int year, int month, int day) {
    // Do something with the date chosen by the user
    editText = (EditText) view.findViewById(R.id.etDepDate);
    editText.setText(day + "/" + month + "/" + year);
}

@Override
public void show(FragmentManager manager, String tag) {
    // TODO Auto-generated method stub
    super.show(manager, tag);
}
}

또한 XML:

 <EditText
     android:id="@+id/etDepDate"
    android:layout_width="wrap_content"
    android:layout_height="50dp"
    android:ems="10"
    android:focusable="false"
    android:hint="@string/dhint"
    android:inputType="date"
    android:onClick="showDatePickerDialog" >

    <requestFocus />
</EditText>

나도 그것은 작품 다른 방법으로,하지만 그것은 사용되지 않으며 I don't 은 그것을 사용하고 싶습니다.DialogFragments 인 오른쪽 그것을 할 수있는 방법입니다.

편집:

 11-14 20:38:06.368: E/AndroidRuntime(31557): FATAL EXCEPTION: main
 11-14 20:38:06.368: E/AndroidRuntime(31557): java.lang.NullPointerException
11-14 20:38:06.368: E/AndroidRuntime(31557):    at        com.xxx.mytrips.DatePick.onDateSet(DatePick.java:36)
11-14 20:38:06.368: E/AndroidRuntime(31557):    at     android.app.DatePickerDialog.tryNotifyDateSet(DatePickerDialog.java:148)
11-14 20:38:06.368: E/AndroidRuntime(31557):    at android.app.DatePickerDialog.onClick(DatePickerDialog.java:116)
11-14 20:38:06.368: E/AndroidRuntime(31557):    at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)
11-14 20:38:06.368: E/AndroidRuntime(31557):    at android.os.Handler.dispatchMessage(Handler.java:99)
11-14 20:38:06.368: E/AndroidRuntime(31557):    at android.os.Looper.loop(Looper.java:137)
11-14 20:38:06.368: E/AndroidRuntime(31557):    at android.app.ActivityThread.main(ActivityThread.java:5041)
11-14 20:38:06.368: E/AndroidRuntime(31557):    at java.lang.reflect.Method.invokeNative(Native Method)
11-14 20:38:06.368: E/AndroidRuntime(31557):    at java.lang.reflect.Method.invoke(Method.java:511)
11-14 20:38:06.368: E/AndroidRuntime(31557):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
11-14 20:38:06.368: E/AndroidRuntime(31557):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
11-14 20:38:06.368: E/AndroidRuntime(31557):    at dalvik.system.NativeStart.main(Native Method)
도움이 되었습니까?

해결책

editText = (EditText) view.findViewById(R.id.etDepDate);를 사용하고 있기 때문입니다.FindViewById EditText는 DatePicker보기의 자식이 아니기 때문에이 경우에 NULL을 반환합니다.

EditText가 활동의 콘텐츠보기의 일부인 경우 다음을 사용할 수 있습니다.

editText = (EditText) getActivity().findViewById(R.id.etDepDate);

이것은 실제로 좋은 방법이 아닙니다.바람직하게는 외부 OnDateSetListener를 조각에 전달합니다.

다른 팁

이라인

    editText = (EditText) view.findViewById(R.id.etDepDate);

은 당신에 오류가 당신을 찾을 수 없습니다 EditTextDatePicker.를 전달해야 합 h EditText 에서 생성자 DatePick 나 어떻게든 값을 전달에서 그것을 다시는 그것의 orignal Activity

DatePicker 클래스를 위해 생성자를 만들고 EditText를 전달합니다. 예 :

public DatePickerFragment (EditText editText) {
    this.editText = editText;
}
.

을 누른 다음 onDateSet() 메소드에서 사용하기 만하면됩니다.

사용

editText = (EditText) getActivity().findViewById(R.id.etDepDate);
.

대신

editText = (EditText) view.findViewById(R.id.etDepDate);
.

DatePick 대화 상자에 EditText가 없습니다.이 유일한 findViewById () in null ..

이 함수에서보기를 제거하면 어떻게됩니까?

public void onDateSet(DatePicker view, int year, int month, int day) {
    // Do something with the date chosen by the user
    //so instead of:
    //editText = (EditText) view.findViewById(R.id.etDepDate);
    //use this:
    editText = (EditText) findViewById(R.id.etDepDate);
    editText.setText(day + "/" + month + "/" + year);
}
.

당신은에 액세스할 수 없 EditTextDatePick 클래스입니다.당신은 필요를 보내는 텍스트로 돌아 StartDatePick 클래스입니다.당신은 그것을 할 수 있는 이 방법입니다.

  1. 인터페이스를 정의 콜백에서 방법 DatePick 클래스입니다.

    callbackListener listener;
    
    interface callbackListener {
    public void setText(String text);
    }
    
  2. 인터페이스를 구현하기에 Start 클래스입니다.

    class Start extends FragmentActivity implements DatePick.callbackListener {
    
    .....
    
    @Override
    public void setText(String text) {
    
    EditText editText = (EditText) view.findViewById(R.id.etDepDate);
    editText.setText(text);
    

    }

  3. onAttach 방법 DatePick 클래스의 할당 원본 활동을 인터페이스 객체입니다.

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        listener = (callbackListener) activity;
    }
    

4.전화 callback 메서드 onDateSet 방법 통과하는 텍스트

public void onDateSet(DatePicker view, int year, int month, int day) {
    listener.setText(day + "/" + month + "/" + year);
}

EditText가 Fragment Activity에 있고 DatePicker DialogFragment가 아닌이 방식으로 직접 액세스 할 수 없습니다.조각 활동에 대한 참조를 만들고 메소드를 통해 액세스하십시오.이 활동에서 EditText의 범위에 액세스 할 범위를 선언하십시오.그런 다음

public void setDate(String Dte){
  editText.setText(Dte);
}
.

이와 같이 대화 구멍 OnDateSet 메서드를 재구성합니다.

public void onDateSet(DatePicker view, int year, int month, int day) {
 // Do something with the date chosen by the user
 ((MainActivity)getActivity()).setDate(day + "/" + month + "/" + year);
}
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top