Android 片段上的ClassCastException

Android 片段上的ClassCastException,android,Android,片段类是: public class NewFragment extends Fragment implements onDateSetListener { TextView tv_Date; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v =

片段类是:

public class NewFragment extends Fragment implements onDateSetListener {

    TextView tv_Date;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.my_fragment, container,
                false);
        return v;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        tv_Date = (TextView) getView().findViewById(
                R.id.tv_newDate);

        tv_Date.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                showDatePickerDialog(v);
            }
        });
    }

    public void showDatePickerDialog(View v) {
        DialogFragment fragment = new DatePickerFragment();
        fragment.show(getFragmentManager(), "datePicker");
    }

    public void setonDate(String date, String tag) {
        // TODO Auto-generated method stub

    }
}
DialogFragment代码是:

public class DatePickerFragment extends DialogFragment implements
        DatePickerDialog.OnDateSetListener {
    public interface onDateSetListener {
        void setonDate(String date,String tag);
    }

    private onDateSetListener mListener;
    String tag = "";

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

    @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);
//      mListener = (OnDateSetListener) getActivity();
        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
        // et_HearingDate.setText((month + 1) + "/" + day + "/" + year);
        mListener = (onDateSetListener) getActivity(); //Error is in this line
        mListener.setonDate((month + 1) + "/" + day + "/" + year,tag);
    }
}
例外情况:

java.lang.ClassCastException: com.example.myProject.NewActivity cannot be cast to com.example.myProject.DatePickerFragment$OnDateSetListener
新活动:

public class NewActivity extends Activity implements
        onItemSelectedListener {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.case_entry_activity);
    }

    public void onItemSelected(String link) {
        FragmentManager manager = getFragmentManager();
        FragmentTransaction transaction = manager.beginTransaction();
        Fragment fragment;
        if ("New Fragment".equals(link)) {
            fragment= new NewFragment();
            transaction.replace(R.id.detailFragment2, fragment);
            transaction.commit();
        } else if ("Existing Fragment".equals(link)) {
            fragment= new ExistingFragment();
            transaction.replace(R.id.detailFragment2, fragment);
            transaction.commit();
        }
    }
}

NewActivity未实现OnDateSetListener。这样做,并定义setOnDate(String,String)方法


但是您可能应该在onAttach(Activity)回调中设置mListener(谷歌建议的方式)

NewActivity没有实现OnDateSetListener。这样做,并定义setOnDate(String,String)方法


但您可能应该在onAttach(活动)回调中设置mListener(谷歌建议的方式)

我不是专业人士,只是想帮忙。您的接口是ondateserlistener,fragment使用它。我提到的这个例子用它的父活动实现了接口。我不是专业人士,只是想帮忙。您的接口是ondateserlistener,fragment使用它。我提到的示例使用其父活动实现了接口。在
setOnDate
方法中,我想调用
NewFragment
textview
。我该怎么做呢?使用FragmentManager使用id获取NewFragment的实例,然后在其上调用一个方法,更新我想调用的
NewFragment
setOnDate
方法中的textview。我该怎么做呢?使用FragmentManager使用id获取NewFragment的实例,然后调用更新textview的方法