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的方法