任何人都可以告诉我下面显示的代码是什么错误。尝试使用编辑文本打开一个日期选择器对话框,但它显示错误无法解决方法findViewById(int)
package com.example.claire.townapp;
import java.util.Calendar;
import android.annotation.SuppressLint;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.View;
import android.widget.DatePicker;
import android.widget.EditText;
@SuppressLint("ValidFragment")
public class DateDialog extends DialogFragment implements
DatePickerDialog.OnDateSetListener {
EditText txtdate;
public DateDialog(View view){
txtdate=(EditText)view;
}
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the dialog
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) {
//show to the selected date in the text box
String date=day+"-"+(month+1)+"-"+year;
txtdate.setText(date);
}
public void onStart(){
super.onStart();
EditText txtDate = (EditText)findViewById(R.id.txtdate);
txtDate.setOnFocusChangeListener(new View.OnFocusChangeListener(){
public void onFocusChange(View view, boolean hasfocus){
if(hasfocus){
DateDialog dialog=new DateDialog(view);
FragmentTransaction ft =getFragmentManager().beginTransaction();
dialog.show(ft, "DatePicker");
}
}
有人知道我如何解决此错误吗?任何帮助都非常感谢!
您代码不起作用的原因是因为FindViewById(int残基)不是片段上的方法,例如活动。您需要一个有效的对象,例如视图来调用findViewById()。AlertDialogs恰好具有一种实用方法,该方法使您可以检查其布局,以了解类似于视图的视图(实际上,在幕后它只是将呼叫传递到其自己的视图对象" mwindow")。获取对话框的引用,然后调用FindViewById()传递您想要的EditText的引用。
我不相信您的代码会起作用,因为您对布局没有任何控制权,因为您只是用片段包装了datepickerdialog。要小心,因为您使用的是框架类,您需要了解其窗口内部的视图。例如。我窥视了datapickerdialog的源代码,但我没有找到具有" txtdate"或什至deDittext ID的视图的引用(我可能是错的,没有彻底地寻找)。将该值传递给FindViewById(INT残基),您将返回null。如果碰巧包含具有该ID的视图,但视图类型的视图,您也可以获得ClassCastException,因此也要特殊护理以查看类型。