Щелчок слушателя вылетает устройство - PullRequest
0 голосов
/ 17 октября 2011

Можете ли вы сказать мне, почему этот прослушиватель щелчков приводит к сбою устройства Android, когда пользователь входит в экран настроек?

    /*
     * Create the preference from the xml file. This will be used in a click
     * listener.
     */
    Preference settingWallpaperChangingIsActivated = (Preference)  findPreference("checkbox_change_wallpaper_is_activated");

    settingWallpaperChangingIsActivated
            .setOnPreferenceClickListener(new OnPreferenceClickListener() {
                public boolean onPreferenceClick(Preference  preference) {
                    return true;
                }
            });

Вот файл settings.xml, относящийся к этому прослушивателю кликов.

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

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

<PreferenceCategory android:title="@string/category_title_wallpaper">
    <CheckBoxPreference android:key="checkbox_change_wallpaper_is_activated"
        android:title="@string/item_title_change_wallpaper"   android:summary="@string/item_summary_change_wallpaper"
        android:defaultValue="false" />

    <ListPreference android:title="@string/list_title_time_before_changing_wallpaper"
        android:key="list_time_before_changing_wallpaper" android:summary="@string/list_summary_time_before_changing_wallpaper"
        android:entries="@array/label_time_before_changing_wallpaper"
        android:entryValues="@array/value_time_before_changing_wallpaper"
        android:defaultValue="Default" />

    <!-- -->
</PreferenceCategory>

</PreferenceScreen>

Если прослушиватель щелчков закомментирован, то экран настроек может отображаться, и, похоже, что-то не так с файлом xml или прослушивателем щелчков.

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

Спасибо.

Действительно, Имад

Обновление:

Это весь класс, который сейчас работает, спасибо всем за помощь:

import hajj.auto.wallpaper.R;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.preference.Preference.OnPreferenceClickListener;
import android.widget.Toast;

public class SettingsActivity extends PreferenceActivity implements
    OnSharedPreferenceChangeListener {

SharedPreferences pref;

/*
 * This is called when the class is created. It displays a Settings screen
 * from the settings.xml file.
 */
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    /*
     * Read the settings definition from XML and show them in the current
     * activity (screen).
     */
    addPreferencesFromResource(R.xml.settings);

    /*
     * This Preference Manager is required for the change listener to work.
     */
    pref = PreferenceManager.getDefaultSharedPreferences(this);

    /*
     * This will allow changes in lists to be trapped.
     */
    pref.registerOnSharedPreferenceChangeListener(this);

    /*
     * Create the preference from the xml file. This will be used in a click
     * listener.
     */

    CheckBoxPreference settingWallpaperChangingIsActivated = (CheckBoxPreference) findPreference("checkbox_changing_is_activated");

    //Preference settingWallpaperChangingIsActivated = (CheckBoxPreference) findPreference("checkbox_change_wallpaper_is_activated");

    settingWallpaperChangingIsActivated.setOnPreferenceChangeListener(new CheckBoxPreference.OnPreferenceChangeListener() {
        public boolean onPreferenceChange(final Preference preference, final Object newValue) {

            Toast.makeText(getApplicationContext(), "Test.",
                    Toast.LENGTH_LONG).show();

            boolean activated = (Boolean) newValue;
           // updateStuff(activated);
            return true;


        }
    });


} // End method onCreate.

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
        String key) {
    // TODO Auto-generated method stub

} // End method onSharedPreferenceChanged.

private void finishThisActivity() {
    this.finish();
} // End method finishThisActivity.
}

Ответы [ 2 ]

2 голосов
/ 17 октября 2011

В коде вы используете объект Preference, тогда как в XML у вас есть CheckBoxPreference. Это две разные вещи, и вы не можете привести одну к другой, если я правильно помню.

Кроме того, подходящий слушатель, который, я думаю, вы хотите, это

CheckBoxPreference.OnPreferenceChangeListener() {
        public boolean onPreferenceChange(final Preference preference, final Object newValue) {
            // Your code here. Make good use of preference and newValue.
            // You can cast newValue to boolean, for example.
        }
}

Полный рабочий образец:

Preference settingWallpaperChangingIsActivated = (CheckBoxPreference) findPreference("checkbox_change_wallpaper_is_activated");

settingWallpaperChangingIsActivated.setOnPreferenceChangeListener(new CheckBoxPreference.OnPreferenceChangeListener() {
    public boolean onPreferenceChange(final Preference preference, final Object newValue) {


        boolean activated = (Boolean) newValue;
        updateStuff(activated);
        return true;


    }
});
1 голос
/ 17 октября 2011

Ошибка в строке 51 hajj.auto.wallpaper.free.SettingsActivity в методе onCreate().Я не могу сказать тебе больше, не видя этот кодХотя, наверное, это потому, что вы пытаетесь добавить слушателя к объекту, который еще не был инициализирован (вероятно, все еще null).

...