2014-11-06 111 views
3

我在編碼中收到此錯誤,並不完全知道如何解決此問題。我試圖解決這個問題,但似乎無法找到任何可行的方法。我以前做過這個,但從來沒有在一個片段,所以也許可能是因爲這個?如何解決一個錯誤:getSharedPreferences(String,int)未定義爲新類型View.OnClickListener(){}

我得到以下exception

The method getSharedPreferences(String, int) is undefined for the type new View.OnClickListener(){}

這裏是我的代碼:

public class TestingFragment extends Fragment { 

public TestingFragment(){} 
private CheckBox ch; 
private Context pref; 

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

    View rootView = inflater.inflate(R.layout.fragment_testing, container, false); 

    ch = (CheckBox) rootView.findViewById(R.id.checkBox62); 
    ch.setOnClickListener(new View.OnClickListener() { 
     private String PREFRENCES_NAME; 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
     if(ch.isChecked()) 
       { 
      SharedPreferences pref = getSharedPreferences(PREFRENCES_NAME,0); 
      ch.setChecked(pref.getBoolean("cbx62_ischecked" ,true)); 
      pref.edit().putBoolean("check",false).commit(); 
      } 
     { 
     }} 
    }); 
    return rootView; 
} } 

任何人都可以請幫助我嗎? 任何幫助將不勝感激!

回答

17

更改此代碼:

SharedPreferences pref = getSharedPreferences(PREFRENCES_NAME,0); 

要:

SharedPreferences pref = getActivity().getSharedPreferences(PREFRENCES_NAME,0); 

記住,你不能直接getSharedPreferences方法從Fragment打電話,因爲它屬於Activity類。因此,您只需撥打getActivity即可。

+0

謝謝!現在都在工作,但是在退出應用程序或返回到此活動時似乎並未將checbox中的勾號保存起來? – Allrounder 2014-11-06 13:08:34

+0

@凱瑟克偉大:)請接受我的回答。你需要爲此創建一個新問題(不是我不想幫你,它是如何工作的 - 1問題1答案)。只是創建一個新的問題:) – 2014-11-06 13:10:11

+0

@Keithk讓我知道的鏈接,我可能能夠再次幫助你:) – 2014-11-06 13:10:59

3

該錯誤表示View類中沒有getSharedPreferences方法,因爲getSharedPreferences是Context類的一種方法。爲了訪問View類中的getSharedPreferences方法,你需要爲它提供一個Context類的實例。喜歡的東西:

//Instance of Context 
Context pref; 

SharedPreferences sharedPref = pref.getSharedPreferences(PREFRENCES_NAME,0); 

注:上下文PREF &字符串PREFRENCES_NAME不能爲空;

相關問題