2

현재 내 응용 프로그램에 환경 설정 부분을 구현하려고하고 있는데 setOnPreferenceClickListener 설정에 문제가 있습니다. 리스너가 전혀 작동하지 않고 코드가 구현되지 않은 것처럼 보입니다. 나는 지금 시험을 위해서 단지 청취자에게 토스트를 가지고 있습니다. 나는 수많은 공개 토론을 찾아보고 좋은 대답을 이제까지는 찾아 내지 않았다. 코드는 다음과 같습니다. 미리 감사드립니다!환경 설정 조각 setOnPreferenceClickListener가 작동하지 않습니다.

SettingFragment.java

public class SettingsFragment extends PreferenceFragment { 

    private OnFragmentInteractionListener mListener; 

    private Preference mFontPreference; 
    private Preference mFontSizePreference; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.fragment_settings); 

     mFontPreference = findPreference("font_preference"); 
     mFontSizePreference = findPreference("font_size_preference"); 

     mFontPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { 
      @Override 
      public boolean onPreferenceClick(Preference preference) { 
       String key = preference.getKey(); 
       Toast.makeText(getActivity(), key, Toast.LENGTH_LONG).show(); 
       return true; 
      } 
     }); 
    } 

fragment_settings.xml

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" > 

    <PreferenceCategory android:title="Text Settings"> 

     <ListPreference 
      android:enabled="true" 
      android:key="font_preference" 
      android:title="Font" 
      android:summary="Select a Font" 
      android:entries="@array/font_spinner_array" 
      android:entryValues="@array/font_spinner_array"/> 

     <ListPreference 
      android:enabled="true" 
      android:key="font_size_preference" 
      android:title="Font Size" 
      android:summary="Select a Font Size" 
      android:entries="@array/font_size_array" 
      android:entryValues="@array/font_size_value_array"/> 

    </PreferenceCategory> 

</PreferenceScreen> 

arrays.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string-array name="font_spinner_array"> 
     <item>System Font</item> 
     <item>Helvetica</item> 
     <item>Helvetica-Neue</item> 
     <item>Impact</item> 
    </string-array> 
    <string-array name="font_size_array"> 
     <item>Small</item> 
     <item>Medium</item> 
     <item>Large</item> 
    </string-array> 
    <string-array name="font_size_value_array"> 
     <item>1</item> 
     <item>2</item> 
     <item>3</item> 
    </string-array> 

편집 : 토스트가 작동하지 않아서 .show()가 없어졌습니다. 그것은 고정되었고 click되었을 때 "font_preference"를 표시합니다. 리스너가 작동하지만 사용자가 클릭하는 항목의 값을 추출하고 전체 환경 설정의 키는 추출하지 않습니다. 그렇게하기위한 방법이 있습니까?

답변

3

일반적인 오류입니다. 당신은 토스트 보여 깜빡 : 나는 테스트 :)에 대한 Log.e을 고수하는 이유 중

Toast.makeText(getActivity(), key, Toast.LENGTH_LONG) 
     .show(); 

하나

편집 :

findPreference("font_size_preference").setOnPreferenceChangeListener(
     new Preference.OnPreferenceChangeListener() { 
    @Override 
    public boolean onPreferenceChange(Preference preference, Object o) { 
     Log.e("", "New value is: " + o.toString()); 
     // True to update the state of the Preference with the new value. 
     return true; 
    } 
}); 

당신은 일반적인 장소에 반환 값에 대해 읽을 수 있습니다 - The Docs.

+0

물론 물론입니다. 내가 지금 시험해 볼께. 건배하기 전에 키를 외부 메서드로 전달하는 데 문제가있었습니다. 내가 집에 돌아올 때 나는 그것을 다시 한번 발사 할 것이다. –

+0

좋아요 토스트가 잘 작동하지만 문제는 키 "font_preference"를 표시한다는 것입니다. 목록 환경 설정 "시스템 글꼴, Helvertica 등"항목의 값을 토스트/로그하고 싶습니다. 사용자가 클릭 한 항목을 어떻게 추출 할 수 있습니까? –

+0

@RichLuick [setOnPreferenceChangeListener] (http://developer.android.com/reference/android/preference/Preference.html#setOnPreferenceChangeListener (android.preference.Preference.OnPreferenceChangeListener))를 참조하십시오. – Simas

관련 문제