gpt4 book ai didi

java - 共享首选项。安卓、Java

转载 作者:搜寻专家 更新时间:2023-11-01 07:47:09 26 4
gpt4 key购买 nike

抱歉,我有一个新手问题,但我认为没关系,因为我是 Android 开发新手(完全是开发新手)。我正在学习如何保存我的偏好设置。我有一个简单的应用程序:

package com.foxysoft.prefssimple;
import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

final static String LOG_TAG = "myLogs";

TextView tvInfo;
SharedPreferences sp;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

tvInfo = (TextView) findViewById(R.id.tvInfo);

sp = PreferenceManager.getDefaultSharedPreferences(this);
}

@Override
protected void onResume() {
Log.d(LOG_TAG, "onResume");
Boolean notif = sp.getBoolean("notif", false);
String address = sp.getString("address", "");
String text = "Notifications are " + ((notif) ? "enabled, address = " + address : "disabled");
tvInfo.setText(text);
super.onResume();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem mi = menu.add(0, 1, 0, "Prefs");
mi.setIntent(new Intent(this, PrefActivity.class));
return super.onCreateOptionsMenu(menu);
}
}

如您所见,我的首选项 (PrefActivity.class) 有一个小菜单和 Activity ,首选项 Activity 有 prefs.xml:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference
android:key="notif"
android:summary="Enable notifications"
android:title="Notifications">
</CheckBoxPreference>
<EditTextPreference
android:key="address"
android:summary="Address for notifications"
android:title="Address">
</EditTextPreference>
</PreferenceScreen>

所以,我的问题是。我的 onResume 中有两行:

Boolean notif = sp.getBoolean("notif", false);
String address = sp.getString("address", "");

如果我理解正确,它应该在每次 onResume 调用时将我的“notif”复选框设置为 false 并且将“address”字符串“”(空)设置为 .. 或者?..如果不是——为什么?这两行肯定是在说“do notif false and address empty”,对吗?

最佳答案

不,你错了 - 因为你正在阅读存储的偏好。

当没有名为“notif”的首选项时;然后使用您提供给该方法调用的默认值;并且 false 将被返回。但是如果有一个保存的首选项“notif”,那么将返回为此保存的

只读相应的javadoc对于那个方法;它说:

defValue boolean 值:此首选项不存在时要返回的值。

返回偏好值(如果存在)或 defValue。

换句话说:如果您之前存储了 true,那么将返回该值。

此外,这里的真实答案是:您这边没有必要假设Android API 调用是如何工作的——所有这些都有很好的记录。因此,当有疑问时,请转向 Javadoc。 (当然 - 尽管我们在回答问题时尽量做到非常准确 - 你仍然可能会在这里收到错误的答案。唯一真正重要的是 API 文档所说的内容!)

关于java - 共享首选项。安卓、Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41612609/

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