我正在学习如何使用共享首选项,我理解如何设置它并使用一个类来获取它。但是我希望能够在两个类中使用共享首选项。让我解释一下。
因此,在下面的课程中,无论何时点击笑话,诗歌或有趣的故事按钮,我基本上都会得到点击次数的总数。此代码如下(称为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;
}
}
但是我有另一个名为'Content'的类,基本上它包含一个名为'Select Another'的按钮。我希望它也包含在点击次数中。
所以这就是基本的目标,无论我在哪个页面,它都应该跟踪按钮笑话,诗歌,有趣故事和选择另一个的点击次数。如何实施?
以下是内容代码:
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();
}
});
}
答案 0 :(得分:0)
您可以使用Singleton模式实现对SharedPreferences的全局访问。像这样:
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();
答案 1 :(得分:0)
共享首选项只是一个包含一组键值对的常用文件。它可以在您的应用程序的任何类中访问。
对于您的情况,您可以将其作为键值对存储在一个类中。 然后使用另一个Class中的相同KeyName检索它。如果流是连续的,它应该检索你存储在另一个类中的值。
请参阅以下现有stackoverflow答案以获取更多信息:: Android Shared preferences example
官方文件: https://developer.android.com/training/data-storage/shared-preferences
教程示例: https://www.journaldev.com/9412/android-shared-preferences-example-tutorial
答案 2 :(得分:0)
如果你正在使用Dagger(或任何其他依赖注入器),你可以注入sharedPreferences助手类
如果没有,你可以像Rado描述的那样创建一个单例实例。
您还可以查看共享首选项实用程序,例如FastSave-Android或EasyPrefs