34

我收到一个错误

show(FragmentManager, String)类型中的方法DialogFragment不适用于参数(FragmentManager, String)

package com.example.test1;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentActivity;

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void click(View view) {
        DialogFragment newFragment = new FireMissilesDialogFragment();
        newFragment.show(getFragmentManager(), "missiles");
    }

    public boolean onCreateOtionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}
4

6 回答 6

50

当你使用android.support.v4.app.DialogFragment时,你应该传递给一个可以使用调用来查询show()的实例。希望这可以帮助。android.support.v4.app.FragmentManagergetSupportFragmentManager()

于 2012-11-01T11:07:28.000 回答
30

问题是因为您需要使用支持包的 FragmentManager,但在调用 getFragmentManager() 时使用的是本机 FragmentManager。初始化变量 fm 时尝试调用 getSupportFragmentManager()

您还必须确保从 Support 包中包含 DialogFragment,而不是从本机包中包含。

您可以通过导入来做到这一点,

import android.support.v4.app.DialogFragment;
于 2012-11-01T11:09:28.273 回答
19

即使我在姜饼中运行代码时也遇到了同样的问题。但适用于 ICS。解决办法是,

而不是这个:

public class MainActivity extends Activity {
}

使用扩展 FragmentActivty

public class MainActivity extends FragmentActivity {
}
于 2013-01-28T05:33:53.357 回答
9

您应该使用android.support.v4.app.FragmentManager而不是android.app.FragmentManager.

那么你应该打电话getSupportFragmentManager()但不是getFragmentManager()

于 2012-11-01T11:08:43.443 回答
3

我在打开 a 时得到了这个,DialogFragment即使我没有使用android.support.v4.app.DialogFragment. 我不得不打电话getActivity().getFragmentManager(),因为getSupportFragmentManager()没有工作。

于 2013-05-04T07:40:03.940 回答
2
public void onClick(View v) {

    switch (v.getId()) {
    case R.id.btnselectDate:
         DialogFragment newFragment = new DatePickerFragment();
         newFragment.show(this.getFragmentManager(), "datePicker");
         break;

         default:
         break;
     }
}
于 2013-05-07T13:03:29.133 回答