0

我有一个扩展 android.support.v4.app.DialogFragment 的类 ActivityExitDialogFragment。ActivityExitDialogFragment 中只有 2 个方法,onCreateDialog 和 newInstance 来获取 ActivityExitDialogFragment 的新实例。他们来了:

public Dialog onCreateDialog(Bundle savedInstanceState) {
    String title = getArguments().getString("title");
Dialog myDialog = new AlertDialog.Builder(getActivity())
.setIcon(R.drawable.ic_launcher)
.setTitle(title)
.setNegativeButton("No", new DialogInterface.OnClickListener() {

    @Override
    public void onClick(DialogInterface dialog, int which) {
        // Dismiss the dialog.
        dismiss();
    }
    })
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {

    @Override
    public void onClick(DialogInterface dialog, int which) {
        // Close the Activity.
        getActivity().finish();
    }
}).create();

return myDialog;
}

static ActivityExitDialogFragment newInstance(String message) {
ActivityExitDialogFragment dialog = new ActivityExitDialogFragment();
Bundle args = new Bundle();
args.putString("title", message);
dialog.setArguments(args);
return dialog;
}

这是用于显示对话框的方法。它在同一个包中的不同活动中。当用户单击退出按钮时调用它:

public void cancelButton(View v) {
    ActivityExitDialogFragment dialog =                        
    ActivityExitDialogFragment.newInstance(exitMessage);

    dialog.show(new FragmentActivity().getSupportFragmentManager(),               
    "Exiting");
}

每当我单击退出按钮时,我都会在 dialog.show 行收到 IllegalStateException。我之前遇到过这个问题,这是因为我的项目的 libs 文件夹中没有 android-support-v4.jar 文件。我把那个 jar 文件放在 libs 文件夹中,它工作了。我将类的名称从其他名称更改为 ActivityExitDialogFragment 并让 eclipse 更改 java 文件的名称以匹配。从那以后,我又遇到了这个例外。我不知道是否是巧合,我在更改名称后再次遇到异常,或者 eclipse 是否做了其他事情,只是更改了 jar 文件的名称以匹配公共类的名称。我尝试更改 getInstance 方法的访问修饰符,删除并添加 android 支持 jar 文件的新副本,将名称改回旧名称,

4

1 回答 1

0

您不应该尝试使用 new 直接实例化 Activity。而是直接从您拥有的活动中获取片段管理器:

dialog.show(getSupportFragmentManager(),               
"Exiting");
于 2012-06-10T16:58:14.157 回答