From 093d7f9c3d93c1ec1e1bf26e2da35618f2b451b6 Mon Sep 17 00:00:00 2001 From: gubi95 Date: Sat, 1 Sep 2018 16:38:58 +0200 Subject: [PATCH 1/2] Select All functionality --- .../sampleapplication/MainActivity.java | 1 + .../library/MultiSelectDialog.java | 54 ++++++++++++++++++- .../library/MutliSelectAdapter.java | 24 ++++++--- .../main/res/layout/custom_multi_select.xml | 3 +- 4 files changed, 71 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/abdeveloper/sampleapplication/MainActivity.java b/app/src/main/java/com/abdeveloper/sampleapplication/MainActivity.java index 0d8f834..f6ed6b6 100755 --- a/app/src/main/java/com/abdeveloper/sampleapplication/MainActivity.java +++ b/app/src/main/java/com/abdeveloper/sampleapplication/MainActivity.java @@ -70,6 +70,7 @@ protected void onCreate(Bundle savedInstanceState) { .positiveText("Done") .negativeText("Cancel") .setMinSelectionLimit(0) + .enableSelectAllItem("Wszystko", true) .setMaxSelectionLimit(listOfCountries.size()) .preSelectIDsList(alreadySelectedCountries) //List of ids that you need to be selected .multiSelectList(listOfCountries) // the multi select model list with ids and name diff --git a/library/src/main/java/com/abdeveloper/library/MultiSelectDialog.java b/library/src/main/java/com/abdeveloper/library/MultiSelectDialog.java index fca46e0..d7d0d99 100755 --- a/library/src/main/java/com/abdeveloper/library/MultiSelectDialog.java +++ b/library/src/main/java/com/abdeveloper/library/MultiSelectDialog.java @@ -4,6 +4,7 @@ import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v7.app.AppCompatDialogFragment; +import android.support.v7.widget.AppCompatCheckBox; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.SearchView; import android.util.TypedValue; @@ -11,6 +12,8 @@ import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; +import android.widget.CompoundButton; +import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; @@ -41,6 +44,9 @@ public class MultiSelectDialog extends AppCompatDialogFragment implements Search private int maxSelectionLimit = 0; private String maxSelectionMessage = null; + private String selectAllItemText = null; + private boolean select_selectAllItemOnCreate = false; + @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { @@ -69,15 +75,48 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { settingValues(); + if(this.select_selectAllItemOnCreate) { + previouslySelectedIdsList.clear(); + + for(int i = 0; i < mainListOfAdapter.size(); i++) { + previouslySelectedIdsList.add(mainListOfAdapter.get(i).getId()); + } + } + + final AppCompatCheckBox selectAllCheckBox = (AppCompatCheckBox) dialog.findViewById(R.id.select_all_checkbox); + LinearLayout selectAllContainer = (LinearLayout) dialog.findViewById(R.id.select_all_container); + mainListOfAdapter = setCheckedIDS(mainListOfAdapter, previouslySelectedIdsList); - mutliSelectAdapter = new MutliSelectAdapter(mainListOfAdapter, getContext()); + + mutliSelectAdapter = new MutliSelectAdapter(mainListOfAdapter, getContext(), selectAllCheckBox); mrecyclerView.setAdapter(mutliSelectAdapter); + if(this.selectAllItemText != null) { + dialog.findViewById(R.id.select_all_container).setVisibility(View.VISIBLE); + ((TextView)dialog.findViewById(R.id.select_all_text)).setText(this.selectAllItemText); + + selectAllContainer.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + selectAllCheckBox.setChecked(!selectAllCheckBox.isChecked()); + } + }); + selectAllCheckBox.setClickable(true); + selectAllCheckBox.setChecked(this.select_selectAllItemOnCreate); + selectAllCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean selected) { + if(selected) { + mutliSelectAdapter.selectAll(); + } + } + }); + } + searchView.setOnQueryTextListener(this); searchView.onActionViewExpanded(); searchView.clearFocus(); - return dialog; } @@ -135,6 +174,17 @@ public MultiSelectDialog setMinSelectionMessage(String message) { return this; } + public MultiSelectDialog enableSelectAllItem(String itemText, boolean selectOnCreate) { + if(itemText == null || itemText.length() == 0) { + throw new IllegalArgumentException("Argument itemText cannot be null or empty"); + } + + this.selectAllItemText = itemText; + this.select_selectAllItemOnCreate = selectOnCreate; + + return this; + } + public MultiSelectDialog onSubmit(@NonNull SubmitCallbackListener callback) { this.submitCallbackListener = callback; return this; diff --git a/library/src/main/java/com/abdeveloper/library/MutliSelectAdapter.java b/library/src/main/java/com/abdeveloper/library/MutliSelectAdapter.java index 1895f89..ae099f7 100755 --- a/library/src/main/java/com/abdeveloper/library/MutliSelectAdapter.java +++ b/library/src/main/java/com/abdeveloper/library/MutliSelectAdapter.java @@ -22,10 +22,12 @@ class MutliSelectAdapter extends RecyclerView.Adapter mDataSet = new ArrayList<>(); private String mSearchQuery = ""; private Context mContext; + private AppCompatCheckBox mSelectAllCheckBox; - MutliSelectAdapter(ArrayList dataSet, Context context) { + MutliSelectAdapter(ArrayList dataSet, Context context, AppCompatCheckBox selectAllCheckBox) { this.mDataSet = dataSet; this.mContext = context; + this.mSelectAllCheckBox = selectAllCheckBox; } @Override @@ -39,23 +41,22 @@ public void onBindViewHolder(final MultiSelectDialogViewHolder holder, int posit if (!mSearchQuery.equals("") && mSearchQuery.length() > 1) { setHighlightedText(position, holder.dialog_name_item); - } else { + } + else { holder.dialog_name_item.setText(mDataSet.get(position).getName()); } if (mDataSet.get(position).getSelected()) { - if (!MultiSelectDialog.selectedIdsForCallback.contains(mDataSet.get(position).getId())) { MultiSelectDialog.selectedIdsForCallback.add(mDataSet.get(position).getId()); } } - - if (checkForSelection(mDataSet.get(position).getId())) { - holder.dialog_item_checkbox.setChecked(true); - } else { - holder.dialog_item_checkbox.setChecked(false); + else if(mSelectAllCheckBox != null) { + mSelectAllCheckBox.setChecked(false); } + holder.dialog_item_checkbox.setChecked(checkForSelection(mDataSet.get(position).getId())); + /*holder.dialog_item_checkbox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -117,6 +118,13 @@ private boolean checkForSelection(Integer id) { return false; } + public void selectAll() { + for(int i = 0; i < mDataSet.size(); i++) { + mDataSet.get(i).setSelected(true); + } + + this.notifyDataSetChanged(); + } /*//get selected name string seperated by coma public String getDataString() { diff --git a/library/src/main/res/layout/custom_multi_select.xml b/library/src/main/res/layout/custom_multi_select.xml index 6344b1d..677cc92 100755 --- a/library/src/main/res/layout/custom_multi_select.xml +++ b/library/src/main/res/layout/custom_multi_select.xml @@ -25,7 +25,8 @@ android:iconifiedByDefault="true" android:queryHint="Search" /> - Date: Sat, 1 Sep 2018 16:40:24 +0200 Subject: [PATCH 2/2] Refactor --- .../java/com/abdeveloper/sampleapplication/MainActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/abdeveloper/sampleapplication/MainActivity.java b/app/src/main/java/com/abdeveloper/sampleapplication/MainActivity.java index f6ed6b6..96ae5aa 100755 --- a/app/src/main/java/com/abdeveloper/sampleapplication/MainActivity.java +++ b/app/src/main/java/com/abdeveloper/sampleapplication/MainActivity.java @@ -70,7 +70,7 @@ protected void onCreate(Bundle savedInstanceState) { .positiveText("Done") .negativeText("Cancel") .setMinSelectionLimit(0) - .enableSelectAllItem("Wszystko", true) + .enableSelectAllItem("Select All", true) .setMaxSelectionLimit(listOfCountries.size()) .preSelectIDsList(alreadySelectedCountries) //List of ids that you need to be selected .multiSelectList(listOfCountries) // the multi select model list with ids and name