方法'getSupportFragmentManager()'不受支持。

18

所以我正在尝试为Android 11以下的版本启用日期选择器。为此,我使用支持库v4。我导入了所有必要的东西:

import android.support.v4.app.*;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.app.DialogFragment;

然后我创建了一个类:

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.widget.EditText;
public class DatePicker extends DialogFragment implements DatePickerDialog.OnDateSetListener  {

public EditText textField;  

@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);
return new DatePickerDialog(getActivity(), this, year, month, day);
}


public EditText getTextField() {
return textField;
}


public void setTextField(EditText textField) {
this.textField = textField;
}


public void onDateSet(DatePicker view, int year, int month, int day) {
textField.setText(day+"."+(month+1)+"."+year);
}

@Override
public void onDateSet(android.widget.DatePicker arg0, int arg1, int arg2,int arg3) {
textField.setText(arg3+"."+(arg2+1)+"."+arg1);
}
}

所以类编译通过了。但问题在于当我尝试使用它时。我有一个EditText的onclick方法,看起来像这样:

public void showDatePicker(View v) {
    DialogFragment selectDate = (DialogFragment) new DatePicker();
    EditText edit=(EditText)v;
    ((DatePicker) selectDate).setTextField(edit);
    selectDate.show(getSupportFragmentManager(), "datePicker");
}

然而,在最后一行我遇到了错误:

The method getSupportFragmentManager() is undefined for the type MainActivity
任何解决这个问题的想法吗?顺便说一下,我没有导入任何东西。

android.app.Fragment;

所以这里不是这种情况 :S


你应该接受其他人的答案,以表明这个问题已经解决。 - Rafael T
所以我做到了,幸运的是我已经过去了 :D - gabrjan
1个回答

67

我猜想你的MainActivity没有继承FragmentActivity!在SupportPackage中,Activity必须继承FragmentActivity才能获得像getSupportedFragmentManager()这样的方法。

编辑:

由于你的Activity正在继承另一个类,你可以尝试实现其中一个类的行为并将它们合并。例如,你可以在此处找到FragmentActivity的代码: FragmentActivity源代码


3
根据我的理解,@gabrjan想表达的是:Android Support包的碎片(fragments)与Maps SDK附加包不兼容。因此,据我所知,SherlockMapActivity只能在API Level 11+上使用,并继承自MapActivity,因此您应该使用getFragmentManager()而不是getSupportFragmentManager() - CommonsWare
那可不是真的,SherlockMapActivity 在 API 级别 8 上完全可以正常工作...因为我已经尝试过了,它运行得非常好。 - gabrjan
所以没有办法做到这一点?我明白为什么它能工作,因为我没有在任何地方使用片段... - gabrjan
最近我遇到了很多不能轻松完成的事情,以至于我要开始讨厌安卓了... - gabrjan
@gabrjan.. API 11+有很多重大的变化,因此将清单文件中的最小SDK设置为11似乎是“可以接受的”。我在3年iOS开发后刚开始学习Android开发,感到非常沮丧。忘记Gingerbread是你需要做出的选择,但在我的情况下,我不会为这种类型的原因支持Gingerbread(还可以消除大量布局文件夹port/land/large/blah/blah)。这是一篇很棒的文章,可能会让你对Android的未来稍微放心一点:http://arstechnica.com/gadgets/2013/04/jelly-bean-reaches-1-in-4-android-devices-tablets-lag-at-10-percent/ - whyoz
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接