Android:以编程方式从Java代码填充微调器

你如何从Java代码编程填充微调?

我在这样的布局中有一个微调:

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

用java代码,我需要创build适配器并添加项目。

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

也要找出select什么,你可以做这样的事情

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

以下是完全编程的示例:

  • 初始化一个微调。
  • 通过string列表填充数据。
  • 调整微调器并将其添加到我的视图。
  • 格式化Spinner字体(字体大小,颜色,填充)。
  • 清除微调。
  • 向Spinner添加新的值。
  • 重新绘制微调。

我正在使用以下class级variables:

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

B – resize并将微调器添加到我的视图:

  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 – 制作点击处理程序并使用它来设置字体。

  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); 并自动激活自定义字体设置。

更新:

这个“丑陋的”解决scheme解决了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); } 

}

希望这可以帮助……