请原谅我的无知,这是我作为android开发者工作的第一周。虽然我有几年的Java在我的腰带,我是一个完整的NoB在Android世界。
我只是想创建一个对话框并显示它。通过研究,我发现这是首选的方法:
https://developer.android.com/guide/topics/ui/dialogs.html
所以,我沿着这条路走,把一个基本的例子放在一起,我在跑步时遇到了一个例外:
09-11 11:57:28.914:e/androidruntime(1217):致命异常:main
09-11 11:57:28.914:e/androidruntime(1217):进程:com.myapp.mobile,
PID:1217 09-11 11:57:28.914:E/AndroidRuntime(1217年):
java.lang.RuntimeException:无法启动活动
组件信息{com.myapp.mobile/com.myapp.mobile.mainActivity}:
java.lang.IllegalStateException:活动已于09-11被销毁
11:57:28.914:E/AndroidRuntime(1217):在
安卓(2195)
09-11 11:57:28.914:E/AndroidRuntime(1217):在
Addio.App.ActuviyToel.HANDLelaunChcActudio(ActuviyToel.java:2245)
09-11 11:57:28.914:E/AndroidRuntime(1217):在
Actudio.App.AccviyTyth.Access 800美元(AccviyTyth.java:135)09-11
11:57:28.914:E/AndroidRuntime(1217):在
Actudio.App.ActuviyT线$ H.HoalMeMeSeX(ActuviyTrim.java:1196)
09-11 11:57:28.914:E/AndroidRuntime(1217):在
Addio.OS.Halder-Debug消息(处理程序. Java:102)0911
11:57:28.914:E/AndroidRuntime(1217):在
安卓.OS.Looper-Loor(Looper-Java:136)0911 11:57:28.914:
E/AndroidRuntime(1217):在
Actudio.App.ActuviyTrime.主(ActhviyTo.java:5017)0911
11:57:28.914:E/AndroidRuntime(1217):在
Java.Lang.Eng.Simult.FutoEnistic(本机方法)0911
11:57:28.914:E/AndroidRuntime(1217):在
Java.Lang.Eng.Simult.Voice(方法.java:515)0911 11:57:28.914:
E/AndroidRuntime(1217):在
COM.Android .No.OS.ZyGoTynIt $方法和AgsCalal.Run(ZyGoTynIt.java:779)
09-11 11:57:28.914:E/AndroidRuntime(1217):在
COM.Android .No.OS.ZyGoTeNIT.MUN(ZyGoTynIt.java:595)09-11
11:57:28.914:E/AndroidRuntime(1217):在
dalvik.system.nativestart.main(本地方法)09-11 11:57:28.914:
e/androidruntime(1217):原因:java.lang.IllegalStateException:
活动已被销毁09-11 11:57:28.914:
E/AndroidRuntime(1217):在
安卓.App.FractMaungErl .EnQueReActudio(FractMealg.java:1345)
09-11 11:57:28.914:E/AndroidRuntime(1217):在
Boo.App.BuffStActudio.Cuffin内部(BuffStActReava. Java:597)
09-11 11:57:28.914:E/AndroidRuntime(1217):在
Android .App.BuffStActReSt.提交(BuffStActReava. Java:575)0911
11:57:28.914:E/AndroidRuntime(1217):在
Addio.Apdio.diaReultStudio .Dead(DeaMatrace.java:230)0911
11:57:28.914:E/AndroidRuntime(1217):在
COM.MyApp.Mobile .Cudio.ActudioCudio.Sube(ActudioTalk.java:25)
09-11 11:57:28.914:E/AndroidRuntime(1217):在
MyApp.Mobile .激活.激活.激活检查(激活. Java:11)
09-11 11:57:28.914:E/AndroidRuntime(1217):在
COM.MyApp.Mobial.MaultActudi.OnCube(MaultActudia. Java:20)0911
11:57:28.914:E/AndroidRuntime(1217):在
Android .App.Activity .PrPultCube(Activity .java:5231)09-11
11:57:28.914:E/AndroidRuntime(1217):在
Addio.App.Tebug .CalActuviyOnCuto(To仪. Java:1087)
09-11 11:57:28.914:E/AndroidRuntime(1217):在
Android .App.ActuviyTrime.PrimeActudiCycActudio(AccviyTyth.java:2159)
09-11 11:57:28.914:E/AndroidRuntime(1217):…11更多
来自mainActivity的调用:

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

    //check user activation
    ActivationDialog dialog = new ActivationDialog();
    dialog.show();
}

激活对话框类:
public class ActivationDialog extends FragmentActivity implements BaseDialogFragment.BaseDialogListener
{
    public ActivationDialog()
    {
    }

    @Override
    public void onDialogPositiveClick(DialogFragment dialog)
    {
    }

    @Override
    public void onDialogNegativeClick(DialogFragment dialog)
    {
    }

    public void show()
    {
        BaseDialogFragment dialogFrag = new BaseDialogFragment();
        dialogFrag.show(this.getFragmentManager(), "activationDialog");
    }
}

基类:
public class BaseDialogFragment extends DialogFragment
{
    public interface BaseDialogListener
    {
        public void onDialogPositiveClick(DialogFragment dialog);
        public void onDialogNegativeClick(DialogFragment dialog);
    }

    BaseDialogListener dialogListener;

    @Override
    public void onAttach(Activity activity)
    {
        super.onAttach(activity);

        try
        {
            dialogListener = (BaseDialogListener)activity;
        }
        catch (ClassCastException e)
        {
            throw new ClassCastException(activity.toString() + " must implement NoticeDialogListener");
        }
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState)
    {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

        builder.setMessage(R.string.dialog_base_message).setPositiveButton(R.string.dialog_base_ok, new DialogInterface.OnClickListener()
        {
            public void onClick(DialogInterface dialog, int id)
            {
            }
        }).setNegativeButton(R.string.dialog_base_cancel, new DialogInterface.OnClickListener()
        {
            public void onClick(DialogInterface dialog, int id)
            {
            }
        });

        return builder.create();
    }
}

最佳答案

我找到了一个更好的方法,通过尝试和错误,并通过例子钓鱼。我想。我不知道这样做是否有缺点,但这是有效的。我现在要尝试添加控件和事件,但这回答了我原来的问题。
自定义对话框片段:

public class MyDialogFragment extends DialogFragment
{
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState)
    {
        return new AlertDialog.Builder(getActivity())
            .setTitle("Dialog Title")
            .setPositiveButton("OK", null)
            .create();
    }
}

显示对话框:
public class MainActivity extends ActionBarActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        MyDialogFragment myDiag = new MyDialogFragment();
        myDiag.show(getFragmentManager(), "Diag");
    }
}

10-04 10:58