我正在尝试为我的应用制作EULA,但我们合作的不同国家/地区有不同的EULA。
我的想法是我在SharedPreferences中保存一个字符串,如南非的ZA和肯尼亚的KE。因此,如果单击南非按钮,它将在SharedPreferences中将字符串保存为ZA,对肯尼亚也是如此。单击按钮后,新活动将通过从SharedPreferences中提取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。
我希望它能够在加载新活动时读取SharedPreferences是否有ZA或KE?我在这里所做的是正确的吗?
谢谢
答案 0 :(得分:1)
我认为您最好使用IntentExtras
,在点击国家/地区按钮时的第一个活动中存储变量中的值,当您想要启动新活动时,将数据作为意图传递额外:
Intent intent= new Intent(getActivity(), NewActivity.class);
intent.putExtra("country", countryCode);
startActivity(intent);
然后在新活动中,你可以检索这样的值:
String countryCode = getIntent().getExtras().getString("country");
答案 1 :(得分:0)
为了在整个应用程序中维护共享首选项,我以这种方式使用它 ,看一看
我将AppPrefes类保存为包
中的seprate类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 AppPrefes类的对象
AppPrefes appPref;
在onCreate中初始化
appPref = new AppPrefes(getActivity(), "type name of your preference");
要将数据保存到首选项,请使用
appPref.SaveData("tag_name", "value to be saved);
从首选项中获取数据
appPref.getData("tag_name");
如果需要,您还可以保存整数值并清除所有首选项值,只需调用apporopriate方法。
答案 2 :(得分:0)
是的,存储部分是正确的。现在,您需要访问新活动中的存储值。
实施例 -
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.