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

时间:2018-06-14 11:36:32

标签: java android

我正在学习如何使用共享首选项,我理解如何设置它并使用一个类来获取它。但是我希望能够在两个类中使用共享首选项。让我解释一下。

因此,在下面的课程中,无论何时点击笑话,诗歌或有趣的故事按钮,我基本上都会得到点击次数的总数。此代码如下(称为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();
                    }
            });

    }

3 个答案:

答案 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-AndroidEasyPrefs