方法“getSupportFragmentManager()”不受支持

Posted

技术标签:

【中文标题】方法“getSupportFragmentManager()”不受支持【英文标题】:The method 'getSupportFragmentManager()' is unsupported 【发布时间】:2012-10-18 18:08:31 【问题描述】:

所以我正在尝试为低于 11 的 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;

,我创建了一个类:

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

【问题讨论】:

您实际上应该接受其他人的答案,表明这是一个已解决的问题 所以我做到了,幸运的是我现在通过了:D 【参考方案1】:

我猜你的MainActivity 没有扩展FragmentActivity!在 SupportPackage 中,Activity 必须从 FragmentActivity 继承才能获得类似 getSupportedFragmentManager() 的方法。

编辑:

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

【讨论】:

哇,这是真的,但我的活动正在扩展 SherlockMapActivity,而且由于 java 只能扩展一项活动,我不知道如何解决这个问题:S @gabrjan:您不能轻易地将 Android 支持包的片段与 Maps SDK 插件一起使用。因此,AFAIK,SherlockMapActivity 仅适用于 API 级别 11+,并且继承自 MapActivity,因此您将使用 getFragmentManager(),而不是 getSupportFragmentManager() 这不是真的 sherlockmapActivity 在 api 级别 8 上工作得很好......因为我试过了,它工作正常。 已知问题:groups.google.com/forum/?fromgroups=#!topic/actionbarsherlock/…, github.com/JakeWharton/ActionBarSherlock-Plugin-Maps/issues/1 所以没办法吗?我明白它为什么会起作用,因为我没有在任何地方使用片段......

以上是关于方法“getSupportFragmentManager()”不受支持的主要内容,如果未能解决你的问题,请参考以下文章

静态方法与实例方法,类方法与对象方法

init()方法和构造方法的区别

GroovyGroovy 扩展方法 ( 扩展静态方法示例 | 扩展实例方法示例 | 扩展实例方法与扩展静态方法代码相同 )

Python中静态方法和类方法的区别

类方法和实例方法

Java中的构造方法与普通方法的区别? 啥情况下用构造方法啥情况下用普通的方法