2012-07-21 82 views
0

我在PreferenceActivity中有一個EditPreference,我有一個變量告訴我是否應允許用戶訪問此首選項或顯示某些警報。Android首選項 - 替換首選項功能

我的問題是,我找不到如何取消首選項對話框,並顯示我的警報(根據變量)。

我試圖在首選項onClickonTreeClick中返回true/false,但那沒做任何事,對話框仍然彈出。

在Android 2.1+上。

謝謝。

回答

2

DialogPreference.onClick()處理對首選項本身的點擊是protected,所以你不能在你自己的PreferenceActivity類成員中覆蓋它。

但是,您可以擴展該類以實現您所需的功能。下面是一個非常簡約的例子:

package com.example.test; 

import android.content.Context; 
import android.preference.EditTextPreference; 
import android.util.AttributeSet; 

public class MyEditTextPreference extends EditTextPreference { 

    private Runnable alternative = null; 

    public MyDatePickerDialog(Context context, 
      AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

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

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

    public void setAlternativeRunnable(Runnable runnable) { 
     alternative = runnable; 
    } 

    // this will probably handle your needs 
    @Override 
    protected void onClick() { 
     if (alternative == null) super.onClick(); 
     else alternative.run(); 
    } 

} 

在XML文件中:

<com.example.test.MyEditTextPreference 
     android:key="myCustom" 
     android:title="Click me!" /> 

在你PreferenceActivity

MyEditTextPreference pref = (MyEditTextPreference) this.findPreference("myCustom"); 
pref.setAlternativeRunnable(new Runnable() { 
    @Override 
    public void run() { 
     Toast.makeText(getApplication(), "Canceled!", Toast.LENGTH_SHORT) 
       .show(); 
    } 
}); 

最後要注意,讓我說,只要你無法找到你想要的方法,想想看看Android類自己的工作方式。大多數時候,他們會給你很好的見解,以達到你想要的。

在這種情況下,它是DialogInterface.onClick()方法,如上所述。所以你知道你需要重寫它以達到目的。在這種情況下,解決方案正在擴展EditTextPreference類本身。

+0

順便說一句,你肯定可以改善與標誌等。這只是一個例子。 – davidcesarino 2012-07-21 15:39:08