DialogPreference принудительное закрытие - PullRequest
1 голос
/ 15 февраля 2012

Для школьного проекта я создаю приложение, используя PreferenceScreen s в качестве фреймворка.
Я создал 2 новых класса в соответствии со своими потребностями: SeekBarDialogPreference (разработан для обработки громкости и яркости) иDigitalPreference (для всего остального).

class SeekBarDialogPreference extends DialogPreference {

    static HashMap<String, Integer> maxValues = new HashMap<String, Integer>(6);
    AudioManager am = (AudioManager) APP.getContext().getSystemService(Context.AUDIO_SERVICE);
    View views = new View(APP.getContext());
    SeekBar sb;
    CheckBox cb;

    @Override
    protected void onBindDialogView(View view) {
        sb = (SeekBar) views.findViewById(R.id.seekbar);
        cb = (CheckBox) views.findViewById(R.id.unchanged_check);
        sb.setMax(maxValues.get(this.getKey()));

        super.onBindDialogView(view);
    }

    @Override
    protected void onDialogClosed(boolean positiveresult) {
        super.onDialogClosed(positiveresult);
        if (positiveresult) {
            Editor editor = getEditor();
            editor.putInt(this.getKey(), cb.isChecked() ? -1 : sb.getProgress());
            editor.commit();
        }
    }

    void show() {
        onClick();
    }
}

и DigitalPreference

public class DigitalPreference extends ListPreference{

    void show(){
        onClick();
    }

Вот объединяющая TopPage, которая является главной страницей

public class TopPage extends PreferenceActivity {

    @Override
    public void onCreate(Bundle allthethings) {
        super.onCreate(allthethings);
        Map<String, ?> shareprefs = PreferenceManager.getDefaultSharedPreferences(this).getAll();
        addPreferencesFromResource(R.xml.prefs);

    }

    @Override
    public void onStart() {
        getPrefs();
    }

    private SeekBarDialogPreference makeSeekBar(Preference pref) {
    return (SeekBarDialogPreference) findPreference(pref.getKey());
    }

    private DigitalPreference makeDigital(Preference pref) {
        return (DigitalPreference) findPreference(pref.getKey());
    }

    private void setClickListener(Preference preference, final boolean isSeekBar) {
        preference.setOnPreferenceClickListener(new OnPreferenceClickListener() {

            public boolean onPreferenceClick(Preference pref) {
                if (isSeekBar) {
                    makeSeekBarDialogPreference(pref).show();
                } else {
                    makeDigitalPreference(pref).show();
                }
                return true;
            }
        });
    }

    public void getPrefs() {

        SeekBarDialogPreference Ringvolume_preference = (SeekBarDialogPreference) findPreference("Ringvolume_preference");
        setClickListener(Ringvolume_Preference, true);

        //Instantiated each Preference and attached a ClickListener to each
}

Iиметь все параметры, объявленные в res / xml / prefs.xml.Теперь всякий раз, когда я запускаю приложение, я немедленно получаю силу закрытия.Я подозреваю, что с моим манифестом что-то не так:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.gobernador"
      android:versionCode="1"
      android:versionName="0.1">
    <uses-sdk android:minSdkVersion="5"
              android:targetSdkVersion="10"/>

    <application android:label="@string/app_name"
             android:name="APP">
        <activity android:name=".TopPage"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Я ссылался на Android: запустить пользовательскую настройку из PreferenceActivity , среди других вопросов stackoverflow, но я не смогчтобы решить проблему.

Если бы кто-то мог направить меня в правильном направлении, вы бы вытащили меня из огромной колеи.Спасибо!

РЕДАКТИРОВАТЬ: После плавания по logcat, я обнаружил исключение в моем файле prefs.xml.

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

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

    <PreferenceScreen android:title="Volumes"
                      android:summary="Ring, Notification, System, etc.">

        <com.gobernador.SeekBarDialogPreference android:key="Ringvolume_preference"
                                        android:title="Ring Volume"
                                        android:summary=""
                                        android:dialogLayout="@layout/seekbar_layout"/>

        <com.gobernador.SeekBarDialogPreference android:key="Notifyvolume_preference"
                                        android:title="Notification Volume"
                                        android:summary=""
                                        android:dialogLayout="@layout/seekbar_layout"/>
... and so on

, где он пытается получить доступ к SeekBarDialogPreference.Почему это не работает?

РЕДАКТИРОВАТЬ: Исключение бросается NoSuchMethodException: SeekBarDialogPreference(Context,AttributeSet).Я определил этот метод, что я пропустил?

1 Ответ

0 голосов
/ 22 февраля 2012

Я нашел свое решение.Это была ошибка Java.Мне не удалось перечислить мои конструкторы для SeekBarDialogPreference и DigitalPreference как публичные, поэтому система не смогла их вызвать.

...