Sfoglia il codice sorgente

MaterialMultiSelectListPreference is now more closely related to the stock version. More improvements for #339.

Aidan Follestad 10 anni fa
parent
commit
eb68fdf117

+ 2 - 1
library/src/main/java/com/afollestad/materialdialogs/prefs/MaterialListPreference.java

@@ -37,7 +37,8 @@ public class MaterialListPreference extends ListPreference {
     @Override
     public void setEntries(CharSequence[] entries) {
         super.setEntries(entries);
-        mDialog.setItems(entries);
+        if (mDialog != null)
+            mDialog.setItems(entries);
     }
 
     @Override

+ 16 - 1
library/src/main/java/com/afollestad/materialdialogs/prefs/MaterialMultiSelectListPreference.java

@@ -12,7 +12,9 @@ import android.view.View;
 import com.afollestad.materialdialogs.MaterialDialog;
 
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 /**
  * This class only works on Honeycomb (API 11) and above.
@@ -23,6 +25,7 @@ import java.util.List;
 public class MaterialMultiSelectListPreference extends MultiSelectListPreference {
 
     private Context context;
+    private MaterialDialog mDialog;
 
     public MaterialMultiSelectListPreference(Context context) {
         this(context, null);
@@ -33,6 +36,13 @@ public class MaterialMultiSelectListPreference extends MultiSelectListPreference
         init(context);
     }
 
+    @Override
+    public void setEntries(CharSequence[] entries) {
+        super.setEntries(entries);
+        if (mDialog != null)
+            mDialog.setItems(entries);
+    }
+
     private void init(Context context) {
         this.context = context;
         if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD_MR1)
@@ -56,6 +66,11 @@ public class MaterialMultiSelectListPreference extends MultiSelectListPreference
                     public void onSelection(MaterialDialog dialog, Integer[] which, CharSequence[] text) {
                         onClick(null, DialogInterface.BUTTON_POSITIVE);
                         dialog.dismiss();
+                        final Set<String> values = new HashSet<>();
+                        for (CharSequence s : text)
+                            values.add((String) s);
+                        if (callChangeListener(values))
+                            setValues(values);
                     }
                 })
                 .dismissListener(this);
@@ -68,6 +83,6 @@ public class MaterialMultiSelectListPreference extends MultiSelectListPreference
             builder.content(getDialogMessage());
         }
 
-        builder.show();
+        mDialog = builder.show();
     }
 }