gpt4 book ai didi

java - edittext 声明为 final,settext 不工作

转载 作者:行者123 更新时间:2023-11-29 04:34:00 24 4
gpt4 key购买 nike

我有很多 edittext 来显示一个 DatePickerDialog,所以我制作了一个方法并将 edittext 作为参数。然后Java说从内部类内部访问时参数应该是最终的。

但是当我运行该应用程序时,它在 edittext.settext() 处停止我怀疑 edittext 作为 final 是问题所在,因为我有另一个代码不能使 edittext 作为参数运行良好。

这是代码:

     public DatePickerDialog setDateTanggalBeri(final EditText editTanggal){

DatePickerDialog datePickTgl;
Calendar newCalendar = Calendar.getInstance();

datePickTgl = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public void onDateSet(DatePicker datePicker, int i, int i1, int i2) {
final Calendar newDate = Calendar.getInstance();
newDate.set(i,i1,i2);
editTanggal.setText(dateFormatter.format(newDate.getTime()));
}
},newCalendar.get(Calendar.YEAR),newCalendar.get(Calendar.MONTH),newCalendar.get(Calendar.DAY_OF_MONTH));

return datePickTgl;

}

这里是错误:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.droid.anindya.jadwalimunisasibayiku, PID: 5669
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.EditText.setText(java.lang.CharSequence)' on a null object reference
at com.droid.anindya.jadwalimunisasibayiku.Display_Jadwal$1.onDateSet(Display_Jadwal.java:209)
at android.app.DatePickerDialog.onClick(DatePickerDialog.java:137)
at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:163)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

这就是我的实现方式:

在 onCreate 之外的状态:

DatePickerDialog DPD1;
DatePickerDialog DPD2;
DatePickerDialog DPD3;
DatePickerDialog DPD4;
DatePickerDialog DPD5;

onCreate 中的状态:

DPD1 = setDateTanggalBeri(textTgl1);
DPD2 = setDateTanggalBeri(textTgl2);
DPD3 = setDateTanggalBeri(textTgl3);
DPD4 = setDateTanggalBeri(textTgl4);
DPD5 = setDateTanggalBeri(textTgl5);
....

点击编辑文本:

public void tanggalBeri1Clicked(View view) {
DPD1.show();
}
public void tanggalBeri2Clicked(View view) {
DPD2.show();
}

....

最佳答案

既然你说 EditText 在同一个 Activity 中,我建议将它设为类私有(private)对象。

例子:

public class MainActivity extends AppCompatActivity {

private EditText editTanggal; //declaration

@Override
protected void onCreate(Bundle savedInstanceState) {

...
//Initiate the EditText here
//Example:
//editTanggal = (EditText) findViewById(R.id.editText);
...
}

...

public DatePickerDialog setDateTanggalBeri() {

DatePickerDialog datePickTgl;
Calendar newCalendar = Calendar.getInstance();

datePickTgl = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public void onDateSet(DatePicker datePicker, int i, int i1, int i2) {
final Calendar newDate = Calendar.getInstance();
newDate.set(i, i1, i2);
editTanggal.setText(dateFormatter.format(newDate.getTime())); //Only use
}
}, newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));

return datePickTgl;
}
}

这样做,EditText 不必是 final 并且 setDateTanggalBeri() 方法可以以相同的方式工作。

希望对你有帮助。

关于java - edittext 声明为 final,settext 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42564107/

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