gpt4 book ai didi

java - 将 setText 设置为 EditText 时出现 NullPointerException - onDateSet

转载 作者:行者123 更新时间:2023-11-29 10:02:28 25 4
gpt4 key购买 nike

我有一个 editText,当用户单击它时,会出现一个日期对话框,当设置日期时,日期应该出现在 editText 字段中。虽然很简单,但我找不到为什么会得到一个 nullPointer Exception。我尝试了几种方法并大量更改了我的代码,但没有任何效果。这是我的代码的概念之一:

开始上课:

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");

}

}

日期选择类:

 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>

我用另一种方法使它工作,但它已被弃用,我不想使用它。 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 返回 null,因为 editText 不是 DatePicker View 的 subview 。

如果 editText 是您 Activity 的内容 View 的一部分,您可以使用它:

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

顺便说一下,这并不是很好的做法。您最好将外部 OnDateSetListener 传递给 fragment 。

关于java - 将 setText 设置为 EditText 时出现 NullPointerException - onDateSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20001310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com