DialogFragment show()方法中的错误

时间:2013-07-08 09:22:05

标签: android android-fragmentactivity android-dialogfragment

我正在获取 java.lang.IllegalStateException:当我尝试从活动中显示对话碎片时,活动已被销毁。

我在stackoverflow中看到了很多解决方案,但那些并没有解决我的问题 在以下行中出现错误

  

dialogfragment.show(ft,“dialog”);

代码如下。

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类??

1 个答案:

答案 0 :(得分:2)

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

您无法使用new运算符设置ActivityActivity有自己的生命周期,您应该使用IntentstartActivity一起开始Activity。您可能应该扩展DialogFragment而不是FragmentActivity