2017-01-19 84 views
2

我具有被具有2-3個多個選擇噴絲一個xml佈局。我也有一個提交按鈕。ANDROID佈局包含多個MultiSelectionSpinner

然後我懷疑是我怎樣才能選擇值爲每個微調。我也必須保存這些值。那麼我如何獲得選定的值。我怎麼能來知道這是微調,用戶選擇的,我能夠得到公共無效selectedStrings(名單字符串)所選擇的價值,但我怎麼能區分哪些價值觀是我的第一次微調和第二微調和第三微調。你有什麼主意嗎..?

我的代碼

public class DashBoardOne extends Fragment implements MultiSelectionSpinner.OnMultipleItemsSelectedListener{ 
     MultiSelectionSpinner multiSelectionSpinnerIndustry,multiSelectionSpinnerLocation; 
     List<String> arrayIndustry,arrayLocation; 
     Button BtnSubmitAspiration; 
     public DashBoardOne() { 
      arrayIndustry = new ArrayList<String>(); 
     } 

     public static DashBoardOne newInstance(String text) { 
      DashBoardOne dashBoardOne = null; 
      // some code 
      return dashBoardOne; 
     } 

     @Nullable 
     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      View view= inflater.inflate(R.layout.fragment_dashboard, container, false); 

      multiSelectionSpinnerIndustry = (MultiSelectionSpinner) view.findViewById(R.id.SpinnerIndustry); 
      arrayIndustry=db.fillIndustrySpinner(); // gettting the list for first spinner from db 
      arrayLocation=db.fillLocationSpinner(); // gettting the list for 2nd spinner from db 

      multiSelectionSpinnerIndustry.setItems(arrayIndustry); //first spinner 
      multiSelectionSpinnerIndustry.setListener(this); 

      multiSelectionSpinnerLocation.setItems(arrayLocation); // 2nd spinner 
      multiSelectionSpinnerLocation.setListener(this); 

      BtnSubmitAspiration=(Button)view.findViewById(R.id.BtnSubmitAspiration); 

       BtnSubmitAspiration.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        // here i have some code to save the data. How can i get the selected values for my each multiSelectionSpinner ? 
       } 
      }); 
    } 


    @Override 
     public void selectedIndices(List<Integer> indices) { 
     } 
     @Override 
     public void selectedStrings(List<String> strings) { 
      Toast.makeText(getActivity().ge 

tApplicationContext(), 
     strings.toString(), Toast.LENGTH_LONG).show(); // here i am able to get the selected strings, 
                 //But i dont know how to diffrentiate the current value for which spinner 
    } 
} 

類MultiSelectionSpinner

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; 


public class MultiSelectionSpinner extends Spinner implements 
     OnMultiChoiceClickListener { 

    public interface OnMultipleItemsSelectedListener{ 
     void selectedIndices(List<Integer> indices); 
     void selectedStrings(List<String> strings); 
    } 
    private OnMultipleItemsSelectedListener listener; 

    String[] _items = null; 
    boolean[] mSelection = null; 
    boolean[] mSelectionAtStart = null; 
    String _itemsAtStart = null; 

    ArrayAdapter<String> simple_adapter; 

    public MultiSelectionSpinner(Context context) { 
     super(context); 

     simple_adapter = new ArrayAdapter<>(context, 
       android.R.layout.simple_spinner_item); 
     super.setAdapter(simple_adapter); 
    } 

    public MultiSelectionSpinner(Context context, AttributeSet attrs) { 
     super(context, attrs); 

     simple_adapter = new ArrayAdapter<>(context, 
       android.R.layout.simple_spinner_item); 
     super.setAdapter(simple_adapter); 
    } 

    public void setListener(OnMultipleItemsSelectedListener listener){ 
     this.listener = listener; 
    } 

    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.setTitle("Please select!!!"); 
     builder.setMultiChoiceItems(_items, mSelection, this); 
     _itemsAtStart = getSelectedItemsAsString(); 
     builder.setPositiveButton("Submit", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       System.arraycopy(mSelection, 0, mSelectionAtStart, 0, mSelection.length); 
       listener.selectedIndices(getSelectedIndices()); 
       listener.selectedStrings(getSelectedStrings()); 
      } 
     }); 
     builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       simple_adapter.clear(); 
       simple_adapter.add(_itemsAtStart); 
       System.arraycopy(mSelectionAtStart, 0, mSelection, 0, mSelectionAtStart.length); 
      } 
     }); 
     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]; 
     mSelectionAtStart = new boolean[_items.length]; 
     simple_adapter.clear(); 
     simple_adapter.add(_items[0]); 
     Arrays.fill(mSelection, false); 
     mSelection[0] = true; 
     mSelectionAtStart[0] = true; 
    } 

    public void setItems(List<String> items) { 
     _items = items.toArray(new String[items.size()]); 
     mSelection = new boolean[_items.length]; 
     mSelectionAtStart = new boolean[_items.length]; 
     simple_adapter.clear(); 
     simple_adapter.add(_items[0]); 
     Arrays.fill(mSelection, false); 
     mSelection[0] = true; 
    } 

    public void setSelection(String[] selection) { 
     for (int i = 0; i < mSelection.length; i++) { 
      mSelection[i] = false; 
      mSelectionAtStart[i] = false; 
     } 
     for (String cell : selection) { 
      for (int j = 0; j < _items.length; ++j) { 
       if (_items[j].equals(cell)) { 
        mSelection[j] = true; 
        mSelectionAtStart[j] = true; 
       } 
      } 
     } 
     simple_adapter.clear(); 
     simple_adapter.add(buildSelectedItemString()); 
    } 

    public void setSelection(List<String> selection) { 
     for (int i = 0; i < mSelection.length; i++) { 
      mSelection[i] = false; 
      mSelectionAtStart[i] = false; 
     } 
     for (String sel : selection) { 
      for (int j = 0; j < _items.length; ++j) { 
       if (_items[j].equals(sel)) { 
        mSelection[j] = true; 
        mSelectionAtStart[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; 
      mSelectionAtStart[i] = false; 
     } 
     if (index >= 0 && index < mSelection.length) { 
      mSelection[index] = true; 
      mSelectionAtStart[index] = true; 
     } else { 
      throw new IllegalArgumentException("Index " + index 
        + " is out of bounds."); 
     } 
     simple_adapter.clear(); 
     simple_adapter.add(buildSelectedItemString()); 
    } 

    public void setSelection(int[] selectedIndices) { 
     for (int i = 0; i < mSelection.length; i++) { 
      mSelection[i] = false; 
      mSelectionAtStart[i] = false; 
     } 
     for (int index : selectedIndices) { 
      if (index >= 0 && index < mSelection.length) { 
       mSelection[index] = true; 
       mSelectionAtStart[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<>(); 
     for (int i = 0; i < _items.length; ++i) { 
      if (mSelection[i]) { 
       selection.add(_items[i]); 
      } 
     } 
     return selection; 
    } 

    public List<Integer> getSelectedIndices() { 
     List<Integer> selection = new LinkedList<>(); 
     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(); 
    } 
} 

回答

3

可以得到選擇的項目爲每個微調當按鈕clicked.Like這

spinner.getSelectedItem().toString(); 
+0

你真是棒極了的男人。它真的很好,你可以建議限制用戶從微調器中選擇3個以上的選項嗎? –

+0

你使用任何庫multiselectionSpinner ..? –

+0

是我使用MultiSelectionSpinner –

2

你可以設置每個旋轉器setOnItemSelectedListener和處理上各自的ArrayList項目的選擇。

就像這樣:

Spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> parent) { 

     } 
    }); 

好運。

+0

謝謝你讓我試試 –

+0

@TiagoDavilla IM無法得到的輸出。這裏有一件事使用片段來做到這一點.. –

+0

怎麼回事?如果您使用的ArrayList來填充此微調和onItemSlected方法傳遞一個位置索引給你,你只需要arraylist.get(位置)。 讓我知道你是否需要更多信息。 –