我有一个“hello world”-ish示例应用程序,它使用了android-support-v4 fragments API。 该活动由一个按钮组成,点击它将显示一个DialogFragment。 但是,即使使用setRetainInstance(true),配置更改(如旋转)也会导致对话框消失。尽管有setRetainInstance,但DialogFragment在旋转时消失了(true)
任何想法如何解决这个问题?
RetFragment.java
package me.local.HelloFroyo;
import android.os.Bundle;
import android.support.v4.app.*;
import android.util.Log;
import android.view.*;
public class RetFragment extends DialogFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.hello_dialog_fragment, container);
}
@Override
public void onDestroy() {
super.onDestroy();
Log.e("RET", "onDestroy");
}
}
MainActivity.java
package me.local.HelloFroyo;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.View;
public class MainActivity extends FragmentActivity {
private static final String TAG_DLG = "myFragDlg";
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
this.setContentView(R.layout.activity_main);
}
public void onShowClick(View v) {
RetFragment ret = new RetFragment();
ret.show(getSupportFragmentManager(), TAG_DLG);
}
}
这似乎并不适用于我 - 对话仍然被驳回.. – ch3rryc0ke
@ ch3rryc0ke你有没有找到任何解决方案,我有同样的问题,我已经实现了上面的代码,但对话框仍然被解雇 – drisse
我不确定这里的解决方法,但是你是对的,你不应该在这种情况下使用'setRetainInstance' 。如果有状态你想坚持,使用'savedInstanceState'或'arguments'' Bundle'。有一个[很好的例子](http://developer.android.com/reference/android/app/DialogFragme nt.html#AlertDialog)在Android文档中介绍如何最好地使用DialogFragment来生成AlertDialog。 – jsadler