相关疑难解决方法(0)

Android DialogFragment vs Dialog

谷歌建议我们使用DialogFragment而不是简单Dialog的使用Fragments API,但使用隔离DialogFragment的简单的是 - 否确认消息框是荒谬的.在这种情况下,最佳做法是什么?

android android-fragments android-dialog android-dialogfragment

231
推荐指数
7
解决办法
13万
查看次数

如何通过旋转正确保留DialogFragment?

我有一个托管DialogFragment的FragmentActivity.

DialogFragment执行网络请求并处理Facebook身份验证,因此我需要在轮换期间保留它.

我已经阅读了有关这个问题的所有其他问题,但没有一个问题能解决这个问题.

我正在使用putFragment和getFragment来保存Fragment实例,并在重新创建活动期间再次获取它.

但是,我总是在onRestoreInstanceState中调用getFragment时得到一个空指针异常.我还希望防止对话在轮换期间被解雇,但到目前为止,我甚至无法保留它的实例.

有什么想法会出错吗?

这是我的代码目前的样子:

public class OKLoginActivity extends FragmentActivity implements OKLoginDialogListener
{

    private OKLoginFragment loginDialog;
    private static final String TAG_LOGINFRAGMENT = "OKLoginFragment";


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        FragmentManager fm = getSupportFragmentManager();

        if(savedInstanceState == null)
        {
            loginDialog = new OKLoginFragment(); 
            loginDialog.show(fm, TAG_LOGINFRAGMENT);
        }
    }


    @Override
    public void onSaveInstanceState(Bundle outState)
    {
        getSupportFragmentManager().putFragment(outState,TAG_LOGINFRAGMENT, loginDialog);
    }

    @Override
    public void onRestoreInstanceState(Bundle inState)
    {
        FragmentManager fm = getSupportFragmentManager();
        loginDialog = (OKLoginFragment) fm.getFragment(inState, TAG_LOGINFRAGMENT);
    }

}
Run Code Online (Sandbox Code Playgroud)

这是异常堆栈跟踪:

02-01 16:31:13.684: E/AndroidRuntime(9739): FATAL EXCEPTION: …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-dialogfragment android-fragmentactivity

72
推荐指数
3
解决办法
3万
查看次数

Android:旋转更改后的Dialog等恢复

旋转屏幕后如何恢复对话框等?例如,弹出一个alertDialog来告诉用户一些信息.然后用户将屏幕旋转到另一个方向.如何恢复alertDialog?任何人都可以指导我这样做吗?谢谢!

稍后附上:

我查看了android源代码并找到了这些东西:

对话框存储在mManagedDialogs,相关信息是:

mManagedDialogs = new SparseArray<ManagedDialog>();
Run Code Online (Sandbox Code Playgroud)

onSaveInstanceState 有关:

final void performSaveInstanceState(Bundle outState) {
    onSaveInstanceState(outState);
    saveManagedDialogs(outState);
}
Run Code Online (Sandbox Code Playgroud)

saveManagedDialogs,它有一些关系mManagedDialogs.

onRestoreInstanceState 有关:

final void performRestoreInstanceState(Bundle savedInstanceState) {
    onRestoreInstanceState(savedInstanceState);
    restoreManagedDialogs(savedInstanceState);
}
Run Code Online (Sandbox Code Playgroud)

restoreManagedDialogs,它有一些关系mManagedDialogs.

如您所见,对于高级功能,您必须自己执行保存和恢复工作.当你有吨定制的对话框时,它可能是一个夜晚的母马.我没有尝试过复杂的对话框(输入EdiText,listView,比如说).这样,我想警告用户:在对话框中输入信息时不要旋转屏幕...或者,在显示对话框时动态锁定旋转.

感谢所有回答我的人.希望我的信息对你也有帮助.

android dialog restore rotation

7
推荐指数
2
解决办法
2万
查看次数

Android - 避免在设备轮换后关闭Dialogs的最佳方法

经过对这个论坛的长时间搜索,我找到了很多答案,人们建议使用解决方案来避免轮换后对话被解雇,就像:

android:configChanges="keyboardHidden|orientation"
Run Code Online (Sandbox Code Playgroud)

或者覆盖以下方法,这似乎是最推荐的方法:

protected Dialog onCreateDialog(int id)
Run Code Online (Sandbox Code Playgroud)

但是,在查看Android参考文档后,我注意到这些Dialog方法已被弃用.

所以,显而易见的问题是:

今天,在设备轮换后避免Dialogs解散的最佳方法是什么?

提前致谢.

android dialog rotation android-activity

5
推荐指数
2
解决办法
1万
查看次数

对话框的 onSaveInstanceState/onRestoreInstanceState

我想弄清楚 onSaveInstanceState/onRestoreInstanceState 如何与对话框一起工作。使用 Acitivity 很容易,因为它们在 Activity 被终止/重新启动时被调用。

我们的 Activity 显示一个登录对话框。对话框的 onSaveInstanceState/onRestoreInstanceState 什么时候被调用?

当我们解开对象时它会自动调用吗?

android dialog restore save

5
推荐指数
1
解决办法
3439
查看次数