3

java.lang.IllegalStateException: アクティビティが破棄されました。 アクティビティからダイアログフラグメントを表示しようとすると。

私はstackoverflowで多くの解決策を見てきましたが、それらは私の問題を解決しませんでした エラーは次の行で発生します

dialogfragment.show(ft, "ダイアログ");

コードを以下に示します。

class MyDialog extends DialogFragment {

int mNum = 0;
static MyDialog newInstance(){
    return new MyDialog();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    //dialog view
    Log.i("MyDialog", "onCreateview");
    View v = inflater.inflate(R.layout.dialog, container, false);
    TextView v1 = (TextView) v.findViewById(R.id.text);
    v1.setText("dialog shown");
    return v;
}

}


public class DialogActivity extends FragmentActivity{

DialogFragment dialogfragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


}
void show(){
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    Fragment f = getSupportFragmentManager().findFragmentByTag("dialog");

    if(f != null){
        ft.remove(f);
    }

    dialogfragment = MyDialog.newInstance();

    dialogfragment.setCancelable(false);
    dialogfragment.show(ft, "dialog");
    dialogfragment.setStyle(DialogFragment.STYLE_NO_TITLE, android.R.style.Theme_Holo_Light_Dialog);

}
}

このメソッドを Activity クラスから次のように呼び出しています

DialogActivity dl = new DialogActivity();
    dl.show();

エラーログ

07-08 14:54:09.565: W/System.err(10390): java.lang.IllegalStateException: アクティビティが破棄されました 07-08 14:54:09.565: W/System.err(10390): android.support で.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1314) 07-08 14:54:09.565: W/System.err(10390): android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java: 541) 07-08 14:54:09.565: W/System.err(10390): android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:525) 07-08 14:54:09.565: W/ System.err(10390): android.support.v4.app.DialogFragment.show(DialogFragment.java:138) で

コードの一部を見逃していました。今追加しました

編集 :

DialogActivity の show() メソッドを別の Activity クラスから呼び出す別の方法はありますか??

4

1 に答える 1

2
DialogActivity dl = new DialogActivity();
dl.show();

Activitynew 演算子でan をインスタンス化することはできません。にはActivity独自のライフサイクルがあり、を開始するには を使用Intentする必要があります。おそらく、代わりに拡張する必要がありますstartActivityActivityDialogFragmentFragmentActivity

于 2013-07-08T09:26:37.550 に答える