. 2 min read
In this tip i show you how we can select multiple item inside a spinner using checkbox in android. With the help of MultiSelectionSpinner class.
Step 1. First add this class in your project which help you to achieve multiselect feature in your spinner.
package com.mutiselect; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnMultiChoiceClickListener; import android.util.AttributeSet; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.SpinnerAdapter; import java.util.Arrays; import java.util.LinkedList; import java.util.List; /** * Created by Aneh Thakur on 5/7/2015. */ public class MultiSelectionSpinner extends Spinner implements OnMultiChoiceClickListener { String[] _items = null; boolean[] mSelection = null; ArrayAdapter<String> simple_adapter; public MultiSelectionSpinner(Context context) { super(context); simple_adapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item); super.setAdapter(simple_adapter); } public MultiSelectionSpinner(Context context, AttributeSet attrs) { super(context, attrs); simple_adapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item); super.setAdapter(simple_adapter); } public void onClick(DialogInterface dialog, int which, boolean isChecked) { if (mSelection != null && which < mSelection.length) { mSelection[which] = isChecked; simple_adapter.clear(); simple_adapter.add(buildSelectedItemString()); } else { throw new IllegalArgumentException( "Argument 'which' is out of bounds."); } } @Override public boolean performClick() { AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); builder.setMultiChoiceItems(_items, mSelection, this); builder.show(); return true; } @Override public void setAdapter(SpinnerAdapter adapter) { throw new RuntimeException( "setAdapter is not supported by MultiSelectSpinner."); } public void setItems(String[] items) { _items = items; mSelection = new boolean[_items.length]; simple_adapter.clear(); simple_adapter.add(_items[0]); Arrays.fill(mSelection, false); } public void setItems(List<String> items) { _items = items.toArray(new String[items.size()]); mSelection = new boolean[_items.length]; simple_adapter.clear(); simple_adapter.add(_items[0]); Arrays.fill(mSelection, false); } public void setSelection(String[] selection) { for (String cell : selection) { for (int j = 0; j < _items.length; ++j) { if (_items[j].equals(cell)) { mSelection[j] = true; } } } } public void setSelection(List<String> selection) { for (int i = 0; i < mSelection.length; i++) { mSelection[i] = false; } for (String sel : selection) { for (int j = 0; j < _items.length; ++j) { if (_items[j].equals(sel)) { mSelection[j] = true; } } } simple_adapter.clear(); simple_adapter.add(buildSelectedItemString()); } public void setSelection(int index) { for (int i = 0; i < mSelection.length; i++) { mSelection[i] = false; } if (index >= 0 && index < mSelection.length) { mSelection[index] = true; } else { throw new IllegalArgumentException("Index " + index + " is out of bounds."); } simple_adapter.clear(); simple_adapter.add(buildSelectedItemString()); } public void setSelection(int[] selectedIndicies) { for (int i = 0; i < mSelection.length; i++) { mSelection[i] = false; } for (int index : selectedIndicies) { if (index >= 0 && index < mSelection.length) { mSelection[index] = true; } else { throw new IllegalArgumentException("Index " + index + " is out of bounds."); } } simple_adapter.clear(); simple_adapter.add(buildSelectedItemString()); } public List<String> getSelectedStrings() { List<String> selection = new LinkedList<String>(); for (int i = 0; i < _items.length; ++i) { if (mSelection[i]) { selection.add(_items[i]); } } return selection; } public List<Integer> getSelectedIndicies() { List<Integer> selection = new LinkedList<Integer>(); for (int i = 0; i < _items.length; ++i) { if (mSelection[i]) { selection.add(i); } } return selection; } private String buildSelectedItemString() { StringBuilder sb = new StringBuilder(); boolean foundOne = false; for (int i = 0; i < _items.length; ++i) { if (mSelection[i]) { if (foundOne) { sb.append(", "); } foundOne = true; sb.append(_items[i]); } } return sb.toString(); } public String getSelectedItemsAsString() { StringBuilder sb = new StringBuilder(); boolean foundOne = false; for (int i = 0; i < _items.length; ++i) { if (mSelection[i]) { if (foundOne) { sb.append(", "); } foundOne = true; sb.append(_items[i]); } } return sb.toString(); } }
Step 2. Now add view in your activity file where you want.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context=".MainActivity"> <com.mutiautocomplete.MultiSelectionSpinner android:id="@+id/mySpinner1" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/getSelected" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Check"/> </LinearLayout>
Step3. Now open your MainActivity.java file in which you want to get you selected item.
package com.mutiselect; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.util.Log; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Button; import java.util.ArrayList; public class MainActivity extends ActionBarActivity { MultiSelectionSpinner spinner; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Multi spinner spinner = (MultiSelectionSpinner) findViewById(R.id.getSelected); Button bt = (Button) findViewById(R.id.btn); bt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String s = spinner.getSelectedItemsAsString(); Log.e("getSelected", s); } }); } }
Hope this code help you.
happy coading 🙂
Implement Google Mobile Ads in your React Native application to allows you to monetize your app with AdMob.
Learn how to deploy React and Node.Js application using CI/CD pipeline with Github Actions.
DevOps is a set of practices, tools, and a cultural philosophy that automate and integrate the processes between software development and IT teams. It emphasizes team empowerment, cross-team communication and collaboration, and technology automation.
Learn different between find(), filter() and map() in javascript with example and other array methods in javascript.
MongoDB is an open-source document-oriented database that is designed to store a large scale of data and also allows you to work with that data very efficiently. It is categorized under the NoSQL (Not only SQL) database because the storage and retrieval o