2013-07-04 55 views
-1

我正在爲我的班級同學開發小型應用程序,這是可調節的時間表。它使用片段來顯示一週的每一天爲一個很好的,手指滑動式UI:在片段內創建SharedPreferences對象

Image

在SettingsActivity.class有偏好(在XML中所定義的),其自動存儲在SharedPreferences設置。問題在於,定義片段的類是靜態的。我不能使用有非靜態方法的參考,像一個:

SharedPreferences settings = getSharedPreferences(APP_PREFERENCES, MODE_PRIVATE); 

通過對developer.android.com閱讀文檔和谷歌搜索的幫助,我發現,使用由SettingsActivity.class創建SharedPreferences,我不得不使用PreferenceManager,這樣的:

SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 

現在不告訴我關於非靜態引用的錯誤,但我不知道如何在getDefaultSharedPreferences說法指SettingsActivity.class,因爲我在我的片段靜態類,所以我不能使用「this」。

我也嘗試在靜態類之外創建SharedPreference對象。但是,該對象的所有用法都抱怨「非靜態字段不能從靜態上下文中引用」。

對我來說,在那裏使用SharedPreferences是很重要的,因爲稍後我將按照一個小時實施經驗教訓(TextViews)顏色更改,並且在設置中也可以切換。

這裏是片段類的代碼:

public static class Dzien extends Fragment { 

    public static final String ARG_SECTION_NUMBER = "section_number"; 

    public Dzien() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     View rootView = inflater.inflate(R.layout.fragment_main, container, false); 
     TextView lekcja1 = (TextView) rootView.findViewById(R.id.lekcja1); 
     TextView lekcja2 = (TextView) rootView.findViewById(R.id.lekcja2); 
     TextView lekcja3 = (TextView) rootView.findViewById(R.id.lekcja3); 
     TextView lekcja4 = (TextView) rootView.findViewById(R.id.lekcja4); 
     TextView lekcja5 = (TextView) rootView.findViewById(R.id.lekcja5); 
     TextView lekcja6 = (TextView) rootView.findViewById(R.id.lekcja6); 
     TextView lekcja7 = (TextView) rootView.findViewById(R.id.lekcja7); 
     TextView lekcja8 = (TextView) rootView.findViewById(R.id.lekcja8); 
     TextView lekcja9 = (TextView) rootView.findViewById(R.id.lekcja9); 


     //Here is where I try to create SharedPreference object 
     SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 


     switch (getArguments().getInt(ARG_SECTION_NUMBER)) { 
      case 1: { // Poniedziałek 
       lekcja1.setText(getString(R.string.wos)); 
       lekcja2.setText(getString(R.string.mat)); 
       lekcja3.setText(getString(R.string.ang)); 
       lekcja4.setText(getString(R.string.gw)); 
       lekcja5.setText(getString(R.string.his)); 
       lekcja6.setText(getString(R.string.wf)); 
       lekcja7.setText(getString(R.string.pp)); 
       if (settings.getInt(GRUPA_INFORMATYKA, 1) == 1) { 
        lekcja8.setText(getString(R.string.inf)); 
       } else { 
        lekcja8.setText(getString(R.string.brak)); 
       } 
       lekcja9.setText(getString(R.string.brak)); 
       break; 
      } 
      case 2: { // Wtorek 
       lekcja1.setText(getString(R.string.mat)); 
       lekcja2.setText(getString(R.string.pp)); 
       lekcja3.setText(getString(R.string.rel)); 
       lekcja4.setText(getString(R.string.wf)); 
       lekcja5.setText(getString(R.string.pol)); 
       lekcja6.setText(getString(R.string.pol)); 
       if (settings.getInt(GRUPA_JEZYKOWA, 1) == 2) { 
        lekcja7.setText(getString(R.string.ros)); 
        lekcja8.setText(getString(R.string.ros)); 
       } else { 
        lekcja7.setText(getString(R.string.brak)); 
        lekcja8.setText(getString(R.string.brak)); 
       } 
       lekcja9.setText(getString(R.string.brak)); 
       break; 
      } 
      case 3: { // Sroda 
       lekcja1.setText(getString(R.string.his)); 
       lekcja2.setText(getString(R.string.wf)); 
       lekcja3.setText(getString(R.string.mat)); 
       lekcja4.setText(getString(R.string.rel)); 
       lekcja5.setText(getString(R.string.ang)); 
       if (settings.getInt(GRUPA_JEZYKOWA, 1) == 1) { 
        lekcja6.setText(getString(R.string.niem)); 
        lekcja7.setText(getString(R.string.niem)); 
       } else { 
        lekcja6.setText(getString(R.string.brak)); 
        lekcja7.setText(getString(R.string.brak)); 
       } 
       lekcja8.setText(getString(R.string.brak)); 
       lekcja9.setText(getString(R.string.brak)); 
       break; 
      } 
      case 4: { // Czwartek 
       lekcja1.setText(getString(R.string.mat)); 
       lekcja2.setText(getString(R.string.fiz)); 
       lekcja3.setText(getString(R.string.wok)); 
       lekcja4.setText(getString(R.string.geo)); 
       lekcja5.setText(getString(R.string.ang)); 
       lekcja6.setText(getString(R.string.chem)); 
       if (settings.getInt(GRUPA_INFORMATYKA, 1) == 2) { 
        lekcja7.setText(getString(R.string.inf)); 
       } else if (((settings.getInt(GRUPA_INFORMATYKA, 1) == 2)) && ((settings.getInt(GRUPA_JEZYKOWA, 1) != 3))) { 
        lekcja7.setText(getString(R.string.brakpre)); 
       } else { 
        lekcja7.setText(getString(R.string.brak)); 
       } 
       if (settings.getInt(GRUPA_JEZYKOWA, 1) == 3) { 
        lekcja8.setText(getString(R.string.por)); 
        lekcja9.setText(getString(R.string.por)); 
       } 
       break; 
      } 
      case 5: { // Piątek 
       lekcja1.setText(getString(R.string.mat)); 
       lekcja2.setText(getString(R.string.mat)); 
       lekcja3.setText(getString(R.string.bio)); 
       lekcja4.setText(getString(R.string.pol)); 
       lekcja5.setText(getString(R.string.pol)); 
       lekcja6.setText(getString(R.string.edb)); 
       if (settings.getBoolean(WDZ, false)) { 
        lekcja7.setText(getString(R.string.wdz)); 
       } else { 
        lekcja7.setText(getString(R.string.brak)); 
       } 
       lekcja8.setText(getString(R.string.brak)); 
       lekcja9.setText(getString(R.string.brak)); 
       break; 
      } 


     } 

     return rootView; 
    } 
} 

P.S.我正在使用Android Studio IDE。

+0

SharedPreferences preferences = this.getActivity()。getSharedPreferences(「pref」,0); – 2013-08-01 00:49:18

回答

0
PreferenceManager.getDefaultSharedPreferences(this); 

要獲得通過這種方法SharedPreferences你必須通過Context對象。所以在這種情況下你可以通過你的Activity,因爲Fragment有辦法得到父ActivityActivity是從Context擴展的類。代碼如下所示:

PreferenceManager.getDefaultSharedPreferences(getActivity()); 

祝你好運!

0

就改成這樣:

SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getActivity()); 
0

我被掛了好幾天試圖獲得我的應用程序存儲的sharepreferences鍵。我發現這個技術筆記關於查看存儲在模擬器上的存儲的XML共享首選項。

http://mrbool.com/how-to-implement-shared-preferences-in-android/28370

這給了我答案,我在做什麼錯。 SharePref的文件名默認爲MainActivity.xml。所以下面的代碼工程。引用

private static String filename =「MainActivity」; pref = getSharedPreferences(filename,0); // new 8/27/14 test