2012-08-12 70 views
52

如何以編程方式從java代碼填充微調器?Android:以編程方式從Java代碼填充微調器

我有這樣的佈局中微調:

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

與Java代碼,我需要創建適配器和添加的項目。

回答

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); 

還找出什麼選擇,你可以做這樣的事情

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

下面是一個例子完全編程:

  • 初始化一個微調。
  • 通過字符串列表填充數據。
  • 調整微調器的大小並將其添加到我的視圖。
  • 格式化Spinner字體(字體大小,顏色,填充)。
  • 清除微調。
  • 向Spinner添加新值。
  • 重繪Spinner。

我使用下面的類瓦爾:

Spinner varSpinner; 
List<String> varSpinnerData; 

float varScaleX; 
float varScaleY;  

A - 初始化並渲染微調(varRoot是指向我的主要活動):

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); 

乙 - 調整和將Spinner添加到我的視圖中:

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處理程序並使用它來設置字體。

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 - 更新微調用新的數據:

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); 

} 

}

我一直沒能在updateInitSpinners解決,就是做varSpinner.setSelection(0);並自動激活自定義字體設置。

UPDATE:

此 「醜」 解決方案解決了varSpinner.setSelection(0);的問題,但我不是很滿意:

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); 

} 

}

希望這有助於......