2014-03-25 3 views
0

onViewCreated 이벤트 내에서 정의 된 버튼의 onclick 이벤트 내에서 누군가가 SharedPreferences에 액세스하는 방법에 대한 지침을 줄 수 있기를 바랍니다.조각에서 onclick의 Android SharedPreferences

내가 호출하여 onViewCreated 이벤트에서 내 인터페이스의 값을 설정할 수 있습니다 '

SharedPreferences prefs = this.getActivity().getSharedPreferences(
    "com.example.app", Context.MODE_PRIVATE); 

하고 적절한 값을 얻을 수 있지만 인터페이스에 버튼이 변경 사항을 저장하기 위해 눌러야하고 내가 할 수있는

Button btn = (Button)view.findViewById(R.id.btnSave); 
btn.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     // Perform action on click 
     Log.d("test","here"); 
     SharedPreferences prefs = this.getActivity().getSharedPreferences(
       "com.example.app", Context.MODE_PRIVATE); 

    } 
}); 

가이 코드는 분명히 여기 뷰를 참조하기 때문에 작동하지 않고 getActivity가에서 작동하지 않습니다 t는에서 내 버튼의 클릭 이벤트 내의 된 SharedPreferences에 액세스 할 수있는 적절한 방법을 마련하는 것 전망. 아무도 나에게 SharedPreferences에 액세스 할 수 있도록 여기에서 Activity에 액세스하는 방법을 말해 줄 수 있습니까?

답변

5

안녕하세요, 그리고 거기에 오신 것을 환영합니다 StackOverflow.

사용자가 액세스 할 수없는 이유 this는 조각이 하지 때문에 SharedPreferences입니다, 당신이 가까이 보면, 당신은 당신이 2 중첩 된 상황이 실현됩니다 그래서 thisOnClickListener 객체가 정말 (즉, 귀하의 조각 안에 있습니다). 당신이 "부모 컨텍스트"에 액세스해야하는 경우

, 당신은 다음과 같이 그렇게 : 자바 말할 필요 있도록

public class MyCoolFragment extends Fragment { 

    // here "this" is in fact your Fragment, 
    // so this.getActivity().getSharedPreferences() DOES exist 

    . 
    . 
    . 

    Button btn = (Button)findViewById(R.id.btnSave); 
    btn.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 

      // Perform action on click 
      // "this" is NO LONGER your fragment, but the View.OnClickListener 
      // to access the PARENT CONTEXT you prepend the CLASS NAME: 

      // MyCoolFragment.this.getActivity().getSharedPreferences will work: 


      SharedPreferences prefs = MyCoolFragment.this.getActivity().getSharedPreferences() 
        "com.example.app", Context.MODE_PRIVATE); 

     } 
    }); 

깊게 중첩 된 컨텍스트를 가지고 자바에서 매우 일반적인 무엇 this을 원하십니까?

또한 을 기억하면 ANY VIEW에서 컨텍스트를 쉽게 얻을 수 있습니다. 당신은 또한 할 수있는 클릭 처리기 내부 있도록는 :

 Button btn = (Button)view.findViewById(R.id.btnSave); 
     btn.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       // Perform action on click 
       Activity myActivity=(Activity)(v.getContext()); // all views have a reference to their context 
       SharedPreferences prefs =myActivity.getSharedPreferences(
         "com.example.app", Context.MODE_PRIVATE); 

      } 
     }); 

는 희망이 도움이!

+0

고맙습니다! 그것은 트릭을했다. 나는 안드로이드 프레임 워크의 일종의 그래픽 묘사를 찾아서 계층 구조를 시각화하고 내가 어디에 있는지 다른 부분에 접근하는 방법을 결정할 수 있어야합니다. 이것은 나에게 안드로이드 개발에서 가장 시간이 많이 소요되는 경향이있다. –

+0

여기에 문제가 있으면 언제든지 게시 해주세요. 사람들이 도움을 원하고있는 커뮤니티입니다. 그런데, 당신이 유용한 대답과 앞으로의 질문에서의 대답을 발견한다면, 당신은 그것을 받아 들여야합니다. 이것은 당신의 "평판"에 포인트를 추가하고 그에 응답하는 포인트를 추가합니다. 이에 대한 정보는 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work에서 찾을 수 있습니다. – rupps

0

getActivity(). getSharedPreferences()를 사용하여 해본 적이 있습니까?

SharedPreferences prefs = getActivity().getSharedPreferences(
      "com.example.app", Context.MODE_PRIVATE); 

참고 : 낮은 평판 때문에 질문 할 수 없습니다.

0

형, 간단합니다. 내 코드를 내 조각에서 보아라. 당신은 그것을하는 방법을 이해할 것입니다

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); 
    return sharedPreferences.getString(key, ""); 
관련 문제