Advertisement
fslasht

MyListPreference

Apr 11th, 2013
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5 2.47 KB | None | 0 0
  1. /*
  2. AndroidのPreferenceActivityのsummaryを自動的に更新するListPreference
  3. */
  4.  
  5.  
  6. public class MyListPreference extends ListPreference {
  7.  
  8.  
  9.     TreeMap<String,String> valueToEntryStringMap_ = new TreeMap<String, String>();  // 値を元に表示名を取得するためのMap
  10.  
  11.     public MyListPreference(Context context, AttributeSet attrs) {
  12.         super(context, attrs);
  13.  
  14.  
  15.  
  16.          final String ANDROID_NAMESPASE="http://schemas.android.com/apk/res/android";
  17.  
  18.         // android:entries で指定されたXMLを取得して、リストの表示名一覧を取得
  19.         String entResName = attrs.getAttributeValue(ANDROID_NAMESPASE, "entries");
  20.         int entArrayId = context.getResources().getIdentifier( entResName, "values", context.getPackageName());
  21.         if ( entArrayId ==0 ) {
  22.             // 「@array/item_names」みたいのを期待してたが実際とれるのは「@1234567」みたいなのだ。コレの場合getIdentifierは失敗して0がかえる
  23.             entArrayId = Integer.parseInt(entResName.substring(1)); // @のあとの数値がidそのものなのでparseするか・・・
  24.         }
  25.         String [] entrys = context.getResources().getStringArray(entArrayId);
  26.  
  27.         // android:entryValues で指定されたXMLを取得して、リストの値一覧を取得
  28.         String valResName = attrs.getAttributeValue(ANDROID_NAMESPASE, "entryValues");
  29.         int valArrayId = context.getResources().getIdentifier( valResName, "values", context.getPackageName());
  30.         if ( valArrayId ==0 ) {
  31.             // 「@array/item_names」みたいのを期待してたが実際とれるのは「@1234567」みたいなのだ。コレの場合getIdentifierは失敗して0がかえる
  32.             valArrayId = Integer.parseInt(valResName.substring(1)); // @のあとの数値がidそのものなのでparseするか・・・
  33.         }
  34.         String [] values = context.getResources().getStringArray(valArrayId);
  35.  
  36.         // Mapに格納
  37.         for ( int i=0; i< values.length; i++ ) {
  38.             valueToEntryStringMap_.put(values[i], entrys[i]);
  39.         }
  40.  
  41.     }
  42.     @Override
  43.     protected void onSetInitialValue(boolean restorePersistedValue, Object defaultValue) {
  44.         super.onSetInitialValue(restorePersistedValue, defaultValue);
  45.  
  46.         String text = getPersistedString("(未設定)");
  47.          setSummary( valueToEntryStringMap_.get(text) );
  48.     }
  49.  
  50.     @Override
  51.     protected void onDialogClosed(boolean positiveResult) {
  52.         if ( positiveResult) {
  53.             super.onDialogClosed(positiveResult);
  54.             String text = getPersistedString("(未設定)");
  55.              setSummary( valueToEntryStringMap_.get(text) );
  56.         }
  57.     }
  58.  
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement