共享偏好仅适用于片段活动

时间:2014-04-22 17:29:10

标签: android orientation sharedpreferences

我有这个片段活动,这是我的主要活动,包括2片段活动。

    /** SharedPreferences */
public static final String MyPREFERENCES = "MyPrefs";
SharedPreferences sharedpreferences;
int currentOrientation;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);

    setContentView(R.layout.activity_main);

    /** Rotation SharedPreferences */
    SharedPreferences preferences = PreferenceManager
            .getDefaultSharedPreferences(this);
    int orienation = preferences.getInt("orientation", -1);
    if (orienation != -1) {
        setRequestedOrientation(orienation);
    }
    /** End */

    mAdapter = new FragmentAdapter(getSupportFragmentManager());

    mPager = (ViewPager) findViewById(R.id.pager);
    mPager.setAdapter(mAdapter);

    mIndicator = (TitlePageIndicator) findViewById(R.id.indicator);
    mIndicator.setViewPager(mPager);

}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    if (outState == null) {
        outState = new Bundle();
    }
    outState.putInt("currentOrientation",
            Integer.valueOf(currentOrientation));
}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);

    currentOrientation = savedInstanceState.getInt("currentOrientation");

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menus, menu);
    return true;
}

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

        /** Rotation */
    case R.id.menuRotate:
        SharedPreferences preferences = PreferenceManager
        .getDefaultSharedPreferences(this);
        Editor editor = preferences.edit();
        if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            editor.putInt("orientation",
                    ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        } else {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            editor.putInt("orientation",
                    ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
        editor.commit();

        break;

    }
    return false;
}

}

我在菜单中设置了方向选项。

用户可以将菜单中的方向更改为横向或纵向。

它工作得很好,但问题是其他活动。

如何阅读我已在主要活动中声明的共享偏好

我想要的是我的应用中的所有活动都与用户从菜单中选择的方向相同。

这是我的其他活动之一:

public class MainList extends Activity {

LinearLayout b1;
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_list);
    b1 = (LinearLayout) findViewById(R.id.list_a);
    b1.setOnClickListener(mb1);

}

View.OnClickListener mb1 = new View.OnClickListener() {
    public void onClick(View v) {
        startActivity(new Intent(MainList.this, List_1.class));
    }
};

提前致谢:)

1 个答案:

答案 0 :(得分:2)

因此,在每个中你应该使用相同的上下文而不仅仅是“this”。

private Context context; 

public void onCreate(){ 
     super.onCreate();
     context = getApplicationContext();
}

public static Context getAppContext() {
       return context;
}

您可以通过其他没有类型的类(只是函数持有者)访问此上下文。

然后,在您使用Shared Prefs时:

final SharedPreferences prefList = context.getSharedPreferences(
                Constants.PREFERENCE_NAME, Context.MODE_PRIVATE);

如果每个人都在使用getApplicationContext(),那么他们就可以互相交谈,因为他们都使用相同的Context。我总是建议您使用Context.MODE_PRIVATE,除非您需要外部应用程序才能从SharedPreferences获取信息。