2012-08-12 11 views
52

Programowo programuje się spinner z kodu Java.Android: Fill Spinner From Java Code Programowo

Mam tarczy w układzie tak:

<Spinner 
    android:id="@+id/consultation_deseases" 
    android:layout_width="@dimen/bigSpinnerWidth" 
    android:layout_height="@dimen/bigSpinnerHeight" 
    android:prompt="@string/disease_prompt" /> 

z kodu java Trzeba utworzyć kartę i dodać elementy.

Odpowiedz

151
// you need to have a list of data that you want the spinner to display 
List<String> spinnerArray = new ArrayList<String>(); 
spinnerArray.add("item1"); 
spinnerArray.add("item2"); 

ArrayAdapter<String> adapter = new ArrayAdapter<String>(
    this, android.R.layout.simple_spinner_item, spinnerArray); 

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
Spinner sItems = (Spinner) findViewById(R.id.spinner1); 
sItems.setAdapter(adapter); 

również dowiedzieć się, co jest zaznaczone można zrobić coś takiego

String selected = sItems.getSelectedItem().toString(); 
if (selected.equals("what ever the option was")) { 
} 
13

Oto przykład, aby w pełni programowo:

  • startowych na Spinner.
  • wypełnij go danymi za pomocą listy ciągów.
  • zmień rozmiar Spinnera i dodaj go do mojego widoku.
  • formatuj czcionkę Spinner (rozmiar czcionki, kolor, wypełnienie).
  • wyczyścić pokrętło.
  • dodaj nowe wartości do Prządki.
  • przerysuj Spinner.

Używam następujące klasy vars:

Spinner varSpinner; 
List<String> varSpinnerData; 

float varScaleX; 
float varScaleY;  

A - Init i renderować Spinner (varRoot jest wskaźnikiem do mojej głównej działalności):

public void renderSpinner() { 


    List<String> myArraySpinner = new ArrayList<String>(); 

    myArraySpinner.add("red"); 
    myArraySpinner.add("green"); 
    myArraySpinner.add("blue");  

    varSpinnerData = myArraySpinner; 

    Spinner mySpinner = new Spinner(varRoot);    

    varSpinner = mySpinner; 

    ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(varRoot, android.R.layout.simple_spinner_item, myArraySpinner); 
    spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // The drop down vieww 
    mySpinner.setAdapter(spinnerArrayAdapter); 

B - Zmiana rozmiaru i Dodaj Spinner do mojego widoku:

FrameLayout.LayoutParams myParamsLayout = new FrameLayout.LayoutParams(
      FrameLayout.LayoutParams.MATCH_PARENT, 
      FrameLayout.LayoutParams.WRAP_CONTENT); 
    myParamsLayout.gravity = Gravity.NO_GRAVITY;    

    myParamsLayout.leftMargin = (int) (100 * varScaleX); 
    myParamsLayout.topMargin = (int) (350 * varScaleY);    
    myParamsLayout.width = (int) (300 * varScaleX);; 
    myParamsLayout.height = (int) (60 * varScaleY);; 


    varLayoutECommerce_Dialogue.addView(mySpinner, myParamsLayout); 

C - Make the Clic k handler i użyj tego, aby ustawić czcionkę.

mySpinner.setOnItemSelectedListener(new OnItemSelectedListener() { 

     @Override 
     public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int myPosition, long myID) { 

      Log.i("renderSpinner -> ", "onItemSelected: " + myPosition + "/" + myID); 

      ((TextView) parentView.getChildAt(0)).setTextColor(Color.GREEN); 
      ((TextView) parentView.getChildAt(0)).setTextSize(TypedValue.COMPLEX_UNIT_PX, (int) (varScaleY * 22.0f)); 
      ((TextView) parentView.getChildAt(0)).setPadding(1,1,1,1); 


     } 

     @Override 
     public void onNothingSelected(AdapterView<?> parentView) { 
      // your code here 
     } 

    }); 

} 

D - Aktualizacja Spinner z nowymi danymi:

private void updateInitSpinners(){ 

    String mySelected = varSpinner.getSelectedItem().toString(); 
    Log.i("TPRenderECommerce_Dialogue -> ", "updateInitSpinners -> mySelected: " + mySelected); 


    varSpinnerData.clear(); 

    varSpinnerData.add("Hello World"); 
    varSpinnerData.add("Hello World 2"); 

    ((BaseAdapter) varSpinner.getAdapter()).notifyDataSetChanged(); 
    varSpinner.invalidate(); 
    varSpinner.setSelection(1); 

} 

}

Co nie udało się rozwiązać w updateInitSpinners, jest zrobić varSpinner.setSelection (0); i dostosuj ustawienia czcionek niestandardowych automatycznie.

UPDATE:

Rozwiązanie "brzydki" rozwiązuje varSpinner.setSelection (0); problem, ale nie jestem bardzo z niego zadowolony:

private void updateInitSpinners(){ 

    String mySelected = varSpinner.getSelectedItem().toString(); 
    Log.i("TPRenderECommerce_Dialogue -> ", "updateInitSpinners -> mySelected: " + mySelected); 


    varSpinnerData.clear(); 

    ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(varRoot, android.R.layout.simple_spinner_item, varSpinnerData); 
    spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    varSpinner.setAdapter(spinnerArrayAdapter); 


    varSpinnerData.add("Hello World"); 
    varSpinnerData.add("Hello World 2"); 

    ((BaseAdapter) varSpinner.getAdapter()).notifyDataSetChanged(); 
    varSpinner.invalidate(); 
    varSpinner.setSelection(0); 

} 

}

Nadzieja to pomaga ......