【问题标题】:Android : Fill Spinner From Java Code ProgrammaticallyAndroid:以编程方式从 Java 代码填充 Spinner
【发布时间】:2012-08-08 21:10:53
【问题描述】:

如何以编程方式从 java 代码中填充微调器?

我在布局中有一个微调器,如下所示:

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

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

【问题讨论】:

    标签: android android-layout android-spinner


    【解决方案1】:
    // 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")) {
    }
    

    【讨论】:

      【解决方案2】:

      这是一个完全以编程方式进行的示例:

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

      我正在使用以下类变量:

      Spinner varSpinner;
      List<String> varSpinnerData;
      
      float varScaleX;
      float varScaleY;    
      

      A - 初始化并渲染 Spinner(varRoot 是指向我的主 Activity 的指针):

      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 - 调整大小并将微调器添加到我的视图中:

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

          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 - 用新数据更新 Spinner:

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

      更新:

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

      }

      希望这会有所帮助......

      【讨论】:

        猜你喜欢
        • 2019-04-26
        • 1970-01-01
        • 1970-01-01
        • 2017-04-07
        • 1970-01-01
        • 1970-01-01
        • 2015-12-13
        • 1970-01-01
        • 2012-12-14
        相关资源
        最近更新 更多