gpt4 book ai didi

Android - 处理屏幕方向变化的对话框

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:09:33 25 4
gpt4 key购买 nike

我正在覆盖 onCreateDialog 和 onPrepareDialog 方法或 Dialog 类。

我按照 Reto Meier 的专业 Android 应用程序开发书第 5 章中的示例提取一些 XML 数据,然后使用对话框显示信息。

我基本上完全遵循了它,但更改了变量以适合我自己的 XML 模式,如下所示:


@Override
public Dialog onCreateDialog(int id) {
switch(id) {
case (SETTINGS_DIALOG) :
LayoutInflater li = LayoutInflater.from(this);
View settingsDetailsView = li.inflate(R.layout.details, null);

AlertDialog.Builder settingsDialog = new AlertDialog.Builder(this);
settingsDialog.setTitle("Provisioned Settings");
settingsDialog.setView(settingsDetailsView);
return settingsDialog.create();
}
return null;
}

@Override
public void onPrepareDialog(int id, Dialog dialog) {
switch(id) {
case (SETTINGS_DIALOG) :

String afpunText = " ";

if(setting.getAddForPublicUserNames() == 1){
afpunText = "Yes";
}
else{
afpunText = "No";
}
String Text = "Login Settings: " + "\n"
+ "Password: " + setting.getPassword() + "\n"
+ "Server: " + setting.getServerAddress() + "\n";


AlertDialog settingsDialog = (AlertDialog)dialog;
settingsDialog.setTitle(setting.getUserName());

tv = (TextView)settingsDialog.findViewById(R.id.detailsTextView);
if (tv != null)
tv.setText(Text);

break;
}
}

它工作正常,直到我尝试更改屏幕方向,当我这样做时 onPrepareDialog 被调用,但我的所有变量都出现空指针异常。

即使我在 list 中告诉我的 Activity 忽略屏幕方向,错误仍然发生。

所以我认为书中的示例遗漏了一些东西,我是否需要覆盖另一种方法来保存我的变量或其他东西?

我现在添加了以下内容:


@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
// Save UI state changes to the savedInstanceState.
// This bundle will be passed to onCreate if the process is
// killed and restarted.
savedInstanceState.putString("Username", setting.getUserName());
savedInstanceState.putString("Password", setting.getPassword());
savedInstanceState.putString("Server", setting.getServerAddress());

super.onSaveInstanceState(savedInstanceState);
}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
settings.clear();
// Restore UI state from the savedInstanceState.
// This bundle has also been passed to onCreate.
username = savedInstanceState.getString("Username");
password = savedInstanceState.getString("Password");
serveraddress = savedInstanceState.getString("Server");


Settings setting = new Settings(username, password, serveraddress);
addNewSettings(setting);

}

但我仍然得到空指针异常

最佳答案

我没有 Reto 的书,所以无法检查代码,但如果书中有错误,您可以轻松地在 Twitter 上联系他进行讨论:http://twitter.com/retomeier

请记住,如果屏幕方向发生变化,您的 Activity 将被重新创建。这意味着您上次设置的任何非静态变量都将在新方向下重新创建 Activity 后丢失。

我的猜测是您在这里遇到了 NullPointerException:

if(setting.getAddForPublicUserNames() == 1){

如果是这样,很可能某些用户操作将“设置”变量更改为 null 以外的其他内容 - 您需要确保在重新创建 Activity 时再次设置它。

此处详细介绍了存储/检索方向之间 Activity 状态的最标准方法:Saving Android Activity state using Save Instance State

关于Android - 处理屏幕方向变化的对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3013530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com