无法解析方法findViewById(int) - 编辑文本到日期选择器



任何人都可以告诉我下面显示的代码是什么错误。尝试使用编辑文本打开一个日期选择器对话框,但它显示错误无法解决方法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,因此也要特殊护理以查看类型。

最新更新