2013-01-07 67 views
1

首選項屏幕XML;請注意,一個首選項是「numberDecimal」。首選項:可以在單擊首選項時查找輸入類型

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > 
    <EditTextPreference 
     android:inputType="textCapWords" 
     android:key="tsName" 
     android:title="@string/pref_common_test_name_title" /> 
    <EditTextPreference 
     android:inputType="numberDecimal" 
     android:key="tsSledWeightValue" 
     android:title="@string/pref_cof_test_sled_weight" /> 
</PreferenceScreen> 

的偏好的onClick方法:現在我想以確定是否偏好的輸入類型爲「numberDecimal」,因爲我想調用自定義編輯器。

private static Preference.OnPreferenceClickListener sBindEditorToPreferenceClickListener = new Preference.OnPreferenceClickListener() { 
    public boolean onPreferenceClick(Preference preference) { 
     boolean isHandled = false; 
     if (preference instanceof EditTextPreference) { 
// ******* CAN I FIND THE PREFERENCE'S "inputType" HERE? 
// ******* EXAMPLE: if(preference.inputType == android:numberDecimal) {} 
     } 
     return isHandled; 
    } 
}; 

編輯:或者是否有更好的方法來實現這個?

回答

1
if(preference instanceof EditTextPreference) { 
    EditText prefText = ((EditTextPreference) preference).getEditText(); 
    int type = prefText.getInputType(); 
    //do stuff 
) 

雖然它似乎有點奇怪。你真的想做什麼?找出哪個被點擊?只分配不同的點擊監聽器。

+0

vedavis說:我們的目標是喊出了 「numberDecimal」 自定義編輯器。你的兩條建議都能奏效。謝謝。 – dmon

1

你也許可以做這樣的事情:

private static Preference.OnPreferenceClickListener sBindEditorToPreferenceClickListener = new Preference.OnPreferenceClickListener() { 
    public boolean onPreferenceClick(Preference preference) { 
     boolean isHandled = false; 
     if (preference instanceof EditTextPreference) { 
      EditTextPreference editTextPreference = (EditTextPreference) preference; 
      EditText editText = editTextPreference.getEditText(); 
      if(editText.getInputType() == InputType.TYPE_NUMBER_FLAG_DECIMAL) { 
       /********************** 
        Do your thing here 
       **********************/ 
       isHandled = true; 
      } 
     } 
     return isHandled; 
    } 
}; 

你的代碼和上面的代碼片段之間的最大區別在於,它是......

  1. 鑄造preferenceEditTextPreference
  2. 拼搶EditText from editTextPreference
  3. 檢查以確保輸入類型的EditText場比賽InputType.TYPE_NUMBER_FLAG_DECIMAL(相當於android:numberDecimal在XML)

你也許可以寫更緊湊,如果你想,但我選擇把它分解,這樣更容易理解。 :)

0

你應該這樣做:

private static Preference.OnPreferenceClickListener sBindEditorToPreferenceClickListener = new Preference.OnPreferenceClickListener() { 
    public boolean onPreferenceClick(Preference preference) { 
     boolean isHandled = false; 
     if (preference instanceof EditTextPreference) { 
       if (((EditTextPreference)preference).getEditText().getInputType()==InputType.TYPE_NUMBER_FLAG_DECIMAL) 
       {} 
     } 
     return isHandled; 
    } 
}; 

可用InputTypes:here

+0

「Preference」類中沒有稱爲'getEditText()'的方法。然而,'EditTextPreference'有你正在尋找的那個。 – ninetwozero

+0

我寫了EditTextPreference作爲OP too –

+0

好吧,我看到你的問題,我解決了這個問題 –