2014-01-15 5 views
1

Я могу заполнить более 1 spinner в Android с несколькими значениями. Я хочу, чтобы отображал больше 1 значения в spinner i.e В позиции «0» (индекс прядильника) Я хочу установить более одного значения в соответствии с пользователем динамически. Когда пользователь выбирает первое значение, которое будет установлено в позиции 0, и когда пользователь нажимает второе значение, он будет добавлен в ту же позицию 0, не заменяя его. Так что два значения могут быть видны и могут использоваться.установка нескольких значений для счетчика в Android

Возможно ли это в android spinner? Если да любое предложение пожалуйста ..

+0

Да, возможно. термин, который вы ищете, это 'spinner with multiple selection'. см. http://stackoverflow.com/questions/5015686/android-spinner-with-multiple-choice и учебник от http://v4all123.blogspot.in/2013/09/spinner-with-multiple-selection-in. html –

+0

спасибо я проверю и дам вам знать :) –

+0

все еще вы боретесь? –

ответ

2

Вы можете следить за

http://labs.makemachine.net/2010/03/android-multi-selection-dialogs/ или http://v4all123.blogspot.in/2013/09/spinner-with-multiple-selection-in.html. Дайте мне знать, если какая-либо ошибка ?? проверить это, я думаю, что это то, что вы ищете http://codethis.wordpress.com/2012/06/17/a-spinner-control-for-android-with-multi-select-support/

В MultiSelectionSpinner класса

import java.util.Arrays; 
import java.util.LinkedList; 
import java.util.List; 

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; 

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(); 
    } 
} 
+0

Можете ли вы объяснить с помощью кода? –

+0

На самом деле это не ответ на вопрос –

+0

@ ling.s Я новичок в android и получаю много путаницы. Так вы можете привести примерный код, как установить несколько значений для вращения, разделив значение с помощью «,» или немного объяснение ??? –

1

Blow решение: -

package com.kazi.createActivity; 


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 com.kazi.R; 

import java.util.List; 


public class MultiSpinner extends Spinner implements 
     OnMultiChoiceClickListener, DialogInterface.OnCancelListener { 

    private List<String> items; 
    private boolean[] selected; 
    private String defaultText; 
    private MultiSpinnerListener listener; 

    public MultiSpinner(Context context) { 
     super(context); 
    } 

    public MultiSpinner(Context arg0, AttributeSet arg1) { 
     super(arg0, arg1); 
    } 

    public MultiSpinner(Context arg0, AttributeSet arg1, int arg2) { 
     super(arg0, arg1, arg2); 
    } 

    @Override 
    public void onClick(DialogInterface dialog, int which, boolean isChecked) { 
     if (isChecked) 
      selected[which] = true; 
     else 
      selected[which] = false; 
    } 

    @Override 
    public void onCancel(DialogInterface dialog) { 
     // refresh text on spinner 
     StringBuffer spinnerBuffer = new StringBuffer(); 
     boolean someUnselected = false; 
     for (int i = 0; i < items.size(); i++) { 
      if (selected[i] == true) { 
       spinnerBuffer.append(items.get(i)); 
       spinnerBuffer.append(", "); 
      } else { 
       someUnselected = true; 
      } 
     } 
     String spinnerText; 
     if (someUnselected) { 
      spinnerText = spinnerBuffer.toString(); 
      if (spinnerText.length() > 2) 
       spinnerText = spinnerText.substring(0, spinnerText.length() - 2); 
     } else { 
      spinnerText = defaultText; 
     } 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(getContext(), 
       R.layout.spinner_list_item, 
       new String[] { spinnerText }); 
     setAdapter(adapter); 
     listener.onItemsSelected(selected); 
    } 

    @Override 
    public boolean performClick() { 
     AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); 
     builder.setMultiChoiceItems(
       items.toArray(new CharSequence[items.size()]), selected, this); 
     builder.setPositiveButton(android.R.string.ok, 
       new DialogInterface.OnClickListener() { 

        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         dialog.cancel(); 
        } 
       }); 
     builder.setOnCancelListener(this); 
     builder.show(); 
     return true; 
    } 

    public void setItems(List<String> items, String[] allText, 
         MultiSpinnerListener listener) { 
     this.items = items; 

     this.listener = listener; 

     // all selected by default 
     selected = new boolean[items.size()]; 
     for (int i = 0; i < selected.length; i++) 
      selected[i] = false; 

     // all text on the spinner 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(getContext(), 
       R.layout.spinner_list_item, allText); 
     setAdapter(adapter); 
    } 

    public interface MultiSpinnerListener { 
     public void onItemsSelected(boolean[] selected); 
    } 
} 

Я создал этот XML макет: -

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/spiner_item" 
android:layout_width="match_parent" 
android:layout_height="@dimen/spiner_height" 
android:background="@drawable/rounded_edittext" 
android:gravity="center_vertical" 
android:paddingLeft="5dp" 
android:text="Medium Text" 
android:textAppearance="?android:attr/textAppearanceMedium" 
android:textColor="@android:color/black" /> 
Смежные вопросы