2

Я пытаюсь открыть веб-сайт, когда нажимается одно из моих предпочтений (не тогда, когда предпочтение фактически изменено, потому что его нет).onPreferenceClick прослушиватель не работает/onPreferenceClick не называется

Проблема в том, что onPreferenceClick() никогда не вызывается.

Это мой PreferenceActivity:

public class About extends PreferenceActivity implements 
     OnPreferenceClickListener { 

TextView tv_developer; 
TextView tv_version; 
String versionName; 

int counter = 0; 

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

     addPreferencesFromResource(R.xml.about);   

     Preference p_developer = (Preference) findPreference("p_developer"); 
     p_developer.setOnPreferenceClickListener(this); 

     Preference p_licences = (Preference) findPreference("p_licences"); 
     p_licences.setOnPreferenceClickListener(this); 



    } 

    @Override 
    public boolean onPreferenceClick(Preference pref) { 
     // TODO Auto-generated method stub 

     Log.i("Anything pressed", "YES"); 
     if (pref.getKey().equals("p_developer")) { 
      Log.i("p_developer", "YES"); 


     } else { 
      Log.i("p_developer", "NO"); 
     } 
     return true; 
    } 
} 

Это XML:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" 
    android:key="about" 
    android:title="About" > 


    <Preference 
     style="?android:preferenceInformationStyle" 
     android:key="p_licences" 
     android:title="p_licences" /> 

    <PreferenceCategory android:title="Category" > 

     <Preference 
      style="?android:preferenceInformationStyle" 
      android:key="p_developer" 
      android:title="p_developer" /> 

    </PreferenceCategory> 

</PreferenceScreen> 

Я также нашел, что это ничего либо не делать:

<Preference android:title="@string/prefs_web_page" > 
    <intent android:action="android.intent.action.VIEW" 
      android:data="http://www.example.com" /> 
</Preference> 

ответ

3

Добавить android:enabled="true" в Preference:

<Preference 
    style="?android:preferenceInformationStyle" 
    android:key="p2" 
    android:enabled="true" 
    android:title="p2" /> 
1

Вы используете :

PreferenceActivity.addPreferencesFromResource(R.layout.about); 

Если это не более, как:

PreferenceActivity.addPreferencesFromResource(R.xml.yourxmlfilename); 

С Тхэ предпочтений вы определили не макет. Вам нужно, чтобы загрузило имя файла .xml, а не ключ предпочтения в .xml.

Итак, разместите свои настройки .xml-файла в папке «xml» и дайте ему имя типа «mypreferences.xml». Затем загрузите его так:

PreferenceActivity.addPreferencesFromResource(R.xml.mypreferences); 

В моем проекте, файл выглядит следующим образом: (название "settings.xml")

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

    <PreferenceCategory android:title="Your Settings" > 
      <Preference 
      android:key="delete" 
      android:title="Delete User" 
      android:summary="Deletes the user." /> 

     <!-- and so on --> 

я добавить его в PreferenceActivity по телефону:

PreferenceActivity.addPreferencesFromResource(R.xml.settings); 

И установить onClickListener:

Preference deletePref = (Preference) findPreference("delete"); 
     deletePref.setOnPreferenceClickListener(new OnPreferenceClickListener() { 

      @Override 
      public boolean onPreferenceClick(Preference preference) { 
       // do stuff 
       return true; 
      } 
     }); 

И это работает.

Кроме того, вы можете попробовать , используя другое название для названия и ключа.

+0

Это не помогло - его в основном то, что я сделал уже, мои предпочтения были просто в папке defferent – RiThBo

+0

Смотрите мой обновленный ответ. Я отправил полный код + xml-файл. Это решение отлично работает в моем проекте. –

+0

Спасибо, но он по-прежнему не работает. – RiThBo

0

Свежий ответ здесь.

Вам необходимо сначала объявить слушателя. Затем добавьте этот слушатель для каждого (!) Объектов End Preference. Нравится этим:

final static int CAMERA_SLEEP_TIME=0, 
       CAMERA_TIME=1, 
       RESET=2; 

private Preference.OnPreferenceClickListener listener =new Preference.OnPreferenceClickListener(){ 
    @Override 
    public boolean onPreferenceClick(Preference preference) { 
     String keyLcl = preference.getKey(); 
     if(keyLcl.equals(cameraSleepTime)) 
      triggerPrefsDialog(CAMERA_SLEEP_TIME); 
     else 
     if (keyLcl.equals(cameraTime)) 
      triggerPrefsDialog(CAMERA_TIME); 
     else 
     if (keyLcl.equals(reset)) 
      triggerPrefsDialog(RESET); 
     else 
     return false; 
     return true; 

    } 


}; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    addPreferencesFromResource(R.xml.preferences); 
    Resources resLcl = getResources(); 
    cameraSleepTime=resLcl.getString(R.string.camera_sleep_time); 
    cameraTime=resLcl.getString(R.string.camera_time); 
    reset =resLcl.getString(R.string.reset); 
    PreferenceScreen sceenLcl = getPreferenceScreen(); 
    PreferenceCategory pcLcl=(PreferenceCategory)sceenLcl.getPreference(1); 
    pcLcl.getPreference(0).setOnPreferenceClickListener(listener); 
    pcLcl.getPreference(1).setOnPreferenceClickListener(listener); 
    pcLcl=(PreferenceCategory)sceenLcl.getPreference(2); 
    pcLcl.getPreference(0).setOnPreferenceClickListener(listener); 
    l.a(pcLcl.getTitle()); 
} 

И соответствующие настройки.XML:

<?xml version="1.0" encoding="utf-8"?> 

<PreferenceCategory 

    android:title="@string/switch_mode"> 

    <CheckBoxPreference 
     android:key="@string/enable_switch" 
     android:defaultValue="true" 
     android:gravity="center" 
     android:title="@string/is_switched" 

     /> 
</PreferenceCategory> 
<PreferenceCategory 

    android:title="@string/seconds_category"> 
    <Preference 
     android:key="@string/camera_time" 

     android:defaultValue="600000" 
     android:title="@string/camera_time" 
     /> 
    <Preference 
     android:key="@string/camera_sleep_time" 
     android:defaultValue="600000" 
     android:title="@string/camera_sleep_time" 
     /> 
</PreferenceCategory> 
<PreferenceCategory 
    android:title="@string/System"> 
    <Preference 
     android:key="@string/reset" 
     android:defaultValue="false" 
     android:title="@string/reset" 
     /> 
</PreferenceCategory> 
<PreferenceCategory 
    android:title="@string/to_be_added"> 
</PreferenceCategory> 

0

Для меня решение было продлить существующий PreferenceCategory класс (в библиотеке поддержки) и переопределить isEnabled(). Этот метод всегда возвращал false, поэтому я создал класс с именем ClickablePreferenceCategory и изменил его на true.

В дополнение к этому мне пришлось добавить android:selectable="true" в свой пользовательский узел xml. Результат выглядит следующим образом:

<PreferenceCategory 
    android:enabled="true" 
    android:key="@string/key_category_problem_solving" 
    android:selectable="true" 
    android:title="@string/problem_solving"> 

</PreferenceCategory> 

И в ClickablePreferenceCategory:

public class ClickablePreferenceCategory extends PreferenceCategory { 

    public ClickablePreferenceCategory(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 
     super(context, attrs, defStyleAttr, defStyleRes); 
    } 

    public ClickablePreferenceCategory(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 

    public ClickablePreferenceCategory(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public ClickablePreferenceCategory(Context context) { 
     super(context); 
    } 

    @Override 
    public boolean isEnabled() { 
     return true; 
    } 
} 
Смежные вопросы