显示DialogFragment

时间:2012-06-10 15:02:06

标签: android android-dialogfragment

我有一个ActivityExitDialogFragment类,它扩展了android.support.v4.app.DialogFragment。 ActivityExitDialogFragment,onCreateDialog和newInstance中只有2个方法可以获取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文件的新副本,将名称更改回旧名称,并且已经在Google上花了几个小时但我还没有找到答案

1 个答案:

答案 0 :(得分:0)

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

dialog.show(getSupportFragmentManager(),               
"Exiting");