我有一个使用Android-support-v4片段API的“hello world”样例应用程序。
该 Activity 包含一个按钮,单击该按钮将显示一个DialogFragment。
但是,即使使用setRetainInstance(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);
}
}
最佳答案
对此发表评论:
“即使使用setRetainInstance(true)。”
不是“即使”,而是“因为”。如果setRetainInstance为false,则将对话框旋转得很好。
这是我在这里找到的解决方法,对我来说效果很好:http://code.google.com/p/android/issues/detail?id=17423
@Override
public void onDestroyView()
{
Dialog dialog = getDialog();
// Work around bug: http://code.google.com/p/android/issues/detail?id=17423
if ((dialog != null) && getRetainInstance())
dialog.setDismissMessage(null);
super.onDestroyView();
}