在“共享首选项”中存储变量,具体取决于单击的按钮



我试图为我的应用程序制作 EULA,但我们合作的不同国家/地区有不同的 EULA。

我的想法是我在共享首选项中保存一个字符串,例如南非的 ZA 和肯尼亚的 KE。因此,如果您单击南非按钮,它将在共享首选项中将字符串保存为 ZA,肯尼亚也是如此。单击按钮后,新活动将通过从共享首选项中提取 ZA 或 KE 字符串来加载相应的 EULA。这是我目前所拥有的:

Country_select.java

public class country_select extends Activity {

private static final String TAG = "Logs";
public static final String PREFS_NAME = "PrefsFile";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_country_select);
    final Button za_button = (Button) findViewById(R.id.btn_za);
    Button ke_button = (Button) findViewById(R.id.btn_ke);
    Log.i(TAG, "created buttons");
    za_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            SharedPreferences prefs = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = prefs.edit();
            editor.putString("Country_Selected", "ZA");
            editor.commit();
        }
    });
    Log.i(TAG, "set button settings for ZA");
    ke_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            SharedPreferences prefs = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = prefs.edit();
            editor.putString("Country_Selected", "KE");
            editor.commit();
        }
    });
    Log.i(TAG, "set button settings for KE");
}

我可能完全不正确,但在布局文件中有 2 个按钮,一个用于 KE,一个用于 ZA。

我希望它,

当加载新活动以读取共享首选项时,它是否有 ZA 或 KE?我在这里所做的是正确的吗?

谢谢

我认为你最好使用 IntentExtras ,在第一个活动中单击国家/地区按钮时将值存储在变量中,当您想启动新活动时,将数据作为意图传递:

Intent intent= new Intent(getActivity(), NewActivity.class);
intent.putExtra("country", countryCode);
startActivity(intent);

然后在新活动中,您可以像这样检索值:

String countryCode = getIntent().getExtras().getString("country");

为了在整个应用程序中保持共享首选项,我以这种方式使用它,看看

我将 AppPrefes 类保存为包中的单独类

public class AppPrefes {
    private SharedPreferences appSharedPrefs;
    private Editor prefsEditor;
    public AppPrefes(Context context, String Preferncename) {
        this.appSharedPrefs = context.getSharedPreferences(Preferncename,
                Activity.MODE_PRIVATE);
        this.prefsEditor = appSharedPrefs.edit();
    }
    /****
     * 
     * getdata() get the value from the preference
     * 
     * */
    public String getData(String key) {
        return appSharedPrefs.getString(key, "");
    }
    public Integer getIntData(String key) {
        return appSharedPrefs.getInt(key, 0);
    }
    /****
     * 
     * SaveData() save the value to the preference
     * 
     * */
    public void SaveData(String Tag, String text) {
        prefsEditor.putString(Tag, text);
        prefsEditor.commit();
    }
    public void SaveIntData(String key, int value) {
        prefsEditor.putInt(key, value);
        prefsEditor.commit();
    }
    /**
     * delete all AppPreference
     */
    public void deleteAll() {
        this.prefsEditor = appSharedPrefs.edit();
        this.prefsEditor.clear();
        this.prefsEditor.commit();
    }

在您的活动或片段中,您想获取或保存数据,只需像这样使用它

Decalre 一个对象 for AppPrefes 类

AppPrefes appPref;

在创建中初始化

appPref = new AppPrefes(getActivity(), "type name of your preference");

将数据保存到首选项使用

appPref.SaveData("tag_name", "value to be saved);

从首选项获取数据

appPref.getData("tag_name");

您还可以保存整数值并清除所有首选项值(如有必要),只需调用 apporopriate 方法即可。

是的,存储部分是正确的。现在,您将需要访问新活动中的存储值。

例-

SharedPreferences prefs = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
String storedCountry = sharedpreferences.getString("Country_Selected"); // could be null value if there is no value stored with Country_Selected tag.

最新更新