【发布时间】:2015-05-04 17:35:16
【问题描述】:
我是 Android 开发新手,我的 ListFragment 有问题。 我正在尝试使用按钮启动 DatePickerDialog。 我的 ListFragment 中的代码如下:
@Override
public void onActivityCreated(final Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
b = (Button) getView().findViewById(R.id.button_set_date);
et = (EditText) getView().findViewById(R.id.editText_choose_date);
b.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
DialogFragment picker = new DatePickerFragment();
picker.show(getActivity().getSupportFragmentManager(), "datePicker");
}
});
@Override
public void returnDate(String date) {
et.setText(date);
}
这是我的 DatePickerFragment:
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
TheListener listener;
public interface TheListener {
public void returnDate(String date);
}
@Override
public Dialog onCreateDialog (Bundle savedInstanceState){
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);
listener = (TheListener) getActivity();
return new DatePickerDialog(getActivity(), this, year, month, day);
}
@Override
public void onDateSet(DatePicker view, int year, int month, int day){
Calendar c = Calendar.getInstance();
c.set(year, month, day);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String formattedDate = sdf.format(c.getTime());
if (listener != null){
listener.returnDate(formattedDate);
}
}
}
点击Button后,出现如下错误:
java.lang.ClassCastException: MainActivity 无法转换为 DatePickerFragment$TheListener
代码在“标准”片段中运行。
在寻找解决方案后,我测试了一些可能性:
1.) 代替getSupportFragmentManager,使用getFragmentManager
--> "无法解析方法'show(android.app.FragmentManager.java.lang.String)'
2.) 而不是 'getActivity().getSupportFragmentManager()',仅使用 'getFragmentManager()' --> 同样点击Button后,出现如下错误:
java.lang.ClassCastException: MainActivity 无法转换为 DatePickerFragment$TheListener
3.) 我尝试将我的导入 import android.support.v4.app.ListFragment; 更改为 android.app.ListFragment;
同样在我的另外两个“标准”片段中,我将导入更改为“android.app.Fragment”
--> 由于这部分,我的 MainActivity 出现问题:
@Override
public Fragment getItem(int position) {
// getItem is called to instantiate the fragment for the given page.
// Return a PlaceholderFragment (defined as a static inner class below).
switch (position){
case 0: return TestListFragment.newInstance("a", "b");
case 1: return TestFragment.newInstance("a","b");
case 2: return TestFragment2.newInstance("a", "b");
default: return PlaceholderFragment.newInstance(position + 1);
}
}
显然我的 MainActivity 不适用于“import android.app.Fragment;”并崩溃。
希望你能帮帮我!
【问题讨论】:
标签: android android-fragments android-studio android-listfragment android-datepicker