不支持方法'getSupportFragmentManager()'

gab*_*jan 17 android datepicker

所以我试图为Android版本启用datepicker,因为我正在使用支持库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;
Run Code Online (Sandbox Code Playgroud)

我创建了一个类:

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);
}
}
Run Code Online (Sandbox Code Playgroud)

所以类编译好了.但问题是当我尝试使用它时.我有一个edittext的onclick方法,看起来像这样:

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

但是在最后一行我收到错误:

The method getSupportFragmentManager() is undefined for the type MainActivity
Run Code Online (Sandbox Code Playgroud)

任何想法如何解决?顺便说一下,我没有进口任何东西

android.app.Fragment;
Run Code Online (Sandbox Code Playgroud)

所以情况并非如此:S

Raf*_*l T 65

我的猜测是你MainActivity没有延伸FragmentActivity!在SupportPackage中,Activity必须从FragmentActivity继承才能获得类似的方法getSupportedFragmentManager().

编辑:

由于您的Activity是从另一个类继承的,因此您可以尝试实现其中一个类的行为,并将它们合并.即在这里,您将找到FragmentActivity的代码: FragmentActivity Source

  • @gabrjan:你不能轻易地将Android支持包的片段与Maps SDK插件一起使用.因此,AFAIK,`SherlockMapActivity`仅适用于API Level 11+并且继承自`MapActivity`,因此您将使用`getFragmentManager()`,而不是`getSupportFragmentManager()`. (3认同)