如何在多个活动中使用共享首选项?



我正在学习如何使用共享首选项,我了解如何设置它并通过一个类获得它。但是,我想成为在两个类之间使用共享偏好的ale。让我解释一下。

因此,在下面的课程中,我基本上获得了单击笑话,诗歌或有趣故事按钮的总点击次数。此代码如下(称为 MainActivity(:

public class MainActivity extends AppCompatActivity{
final Context context = this;
int clicksCount = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button jokesButton = findViewById(R.id.button_jokes);
Button poemsButton = findViewById(R.id.button_poems);
Button funnyStoriesButton = findViewById(R.id.button_funny_stories);

jokesButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
clicksCount++;
storeClicks(clicksCount);
openContentPage("jokes");
}
});
poemsButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
clicksCount++;
storeClicks(clicksCount);
openContentPage("poems");
}
});
funnyStoriesButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
clicksCount++;
storeClicks(clicksCount);
openContentPage("funnystories");
}
});

}
private void openContentPage(String v) {
Intent intentContentPage = new Intent(MainActivity.this, Content.class);
intentContentPage.putExtra("keyPage", v);
startActivity(intentContentPage);
}
public void storeClicks(int count)
{
SharedPreferences mSharedPreferences = getSharedPreferences("numberOfClicks", MODE_PRIVATE);
SharedPreferences.Editor meditor = mSharedPreferences.edit();
meditor.putInt("numberOfClicks", count);
meditor.apply();
}
public int getNumberOfClicks(){
SharedPreferences mSharedPreferences = getSharedPreferences("numberOfClicks", MODE_PRIVATE);
int clicksNumber = mSharedPreferences.getInt("numberOfClicks", clicksCount);
return clicksNumber;
}

}

但是,我有另一个称为"内容"的类,基本上它包含一个称为"选择另一个"的按钮。我希望这也包含在点击次数中。

所以这基本上是目标,无论我在哪个页面上,它都应该跟踪按钮笑话、诗歌、有趣故事的点击次数并选择另一个。如何实现这一点?

以下是内容的代码:

public class Content extends AppCompatActivity{
Button selectAnotherButton;
TextView contentText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_content);
selectAnotherButton = findViewById(R.id.button_select_another);

selectAnotherButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setContent();
}
});
}

您可以使用单例模式来实现对共享首选项的全局访问。像这样:

public class SharedPreferencesManager {
private static final String APP_PREFS = "AppPrefsFile";
private static final String KEY_FOR_SOMETHING = "KEY_FOR_SOMETHING";
private SharedPreferences sharedPrefs;
private static SharedPreferencesManager instance;

private SharedPreferencesManager(Context context) {
sharedPrefs =
context.getApplicationContext().getSharedPreferences(APP_PREFS, Context.MODE_PRIVATE);
}

public static synchronized SharedPreferencesManager getInstance(Context context){
if(instance == null)
instance = new SharedPreferencesManager(context);
return instance;
}
public void setSomething(String something) {
SharedPreferences.Editor editor = sharedPrefs.edit();
editor.putString(KEY_FOR_SOMETHING, something);
editor.apply();
}
public String getSomeKey() {
String someValue = sharedPrefs.getString(KEY_FOR_SOMETHING, null);
return someValue;
}
}

您可以拥有尽可能多的方法来获取和设置SharedPreferences的各种值,并且可以通过整个应用程序访问它,只需执行以下操作:

SharedPreferencesManager.getInstance(context).getSomeKey();

共享首选项只是一个通用文件,其中包含一组键值 Pairs.It 可以在应用的任何类中访问。

对于您的情况,您可以将其存储为一个类中的键值对。 然后在另一个 Class.It 中使用相同的 KeyName 检索它,如果流是连续的,则应检索存储在另一个类中的值。

请参阅下面现有的堆栈溢出答案以获取更多信息:: 安卓共享首选项示例

官方文档 : https://developer.android.com/training/data-storage/shared-preferences

教程示例: https://www.journaldev.com/9412/android-shared-preferences-example-tutorial

最新更新