2012-02-15 13 views
1

学校のプロジェクトでは、PreferenceScreenをフレームワークとして使用してアプリケーションを構築しています。
自分のニーズに合わせて2つの新しいクラスを作成しました。ボリュームと輝度を扱うように設計されたSeekBarDialogPreferenceとその他のものはDigitalPreferenceです。DialogPreference force close

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(); 
    } 

ここ

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 
} 

メインページで統一トップページには、私は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> 

私は他のstackoverflowの質問の中で、Android: launch a custom Preference from a PreferenceActivityを参照しましたが、私は問題をうまくすることができていない:私は私のマニフェストに何か問題があると思います。

誰かが私を正しい方向に牧師になれば、あなたは私を大きな轍から救い出すことができます。ありがとう!

EDIT: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にアクセスしようとします。なぜそれは働いていないのですか?

EDIT:スローされる例外はNoSuchMethodException: SeekBarDialogPreference(Context,AttributeSet)です。私はその方法を定義しました、私は何を欠場しましたか?

+1

logcatの例外はありますか? – nhaarman

+0

例外スタックトレースを投稿してください。 –

+0

スタックトレースラインを追加する必要があります。実際のエラー原因は 'com.gobernador.SeekBarDialogPreference'クラスのコンストラクタ(またはそのメソッド)です。 – Olegas

答えて

0

解決策が見つかりました。それはJavaエラーでした。 SeekBarDialogPreferenceDigitalPreferenceのコンストラクタを公開していないため、システムが呼び出すことができませんでした。

関連する問題