2012-08-12 82 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); 

} 

}

希望这有助于......