【问题标题】:Spinner doesn't show array and textsSpinner 不显示数组和文本
【发布时间】:2020-10-17 13:44:28
【问题描述】:

我是一个非常初学者。微调器不工作。 当我在设计模式下玩它时它没有显示箭头,在我用一些代码实现它后它不显示文本。

 android:id="@+id/spinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />```

``` 微调器微调器;
    数组列表微调器数组列表;
    ArrayAdapter 微调器适配器;

    @覆盖
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        微调器 = findViewById(R.id.spinner);
        spinnerArrayList = new ArrayList();
        spinnerAdapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item,spinnerArrayList);
        spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(spinnerAdapter);

        spinnerArrayList.add("吉他");
        spinnerArrayList.add("鼓");
        spinnerArrayList.add("键盘");

    }```

我确定这些是标准和基本的东西,但不知何故我搞砸了

【问题讨论】:

  • 在将ArrayList 分配给适配器后,您将对其进行更新。默认情况下,Spinner 不会保留对添加到适配器的原始列表的引用,因此要保留更改,您应该使用this 链接中提供的内容。

标签: java android spinner


【解决方案1】:

您正在做的是在设置适配器后更改 ArrayList。 所以适配器不知道数据发生了变化。

你可以通过两种方式解决这个问题:

  1. 在设置适配器之前在 ArrayList 中添加元素

  2. 在代码末尾或更改 ArrayList 时使用 notifyDataSetChanged()

像这样:spinnerAdapter.notifyDataSetChanged()

【讨论】:

    【解决方案2】:

    如果您要插入的列表是静态的,则无需创建 ArrayAdapter 来填充您的微调器。 我建议使用一种更简单直接的方法来避免这种麻烦。

    strings.xml 中:

    <string-array name="list_spinner">
    <item>Guitar</item>
    <item>Drums</item>
    <item>Keyboard</item>
    </string-array>
    

    在包含微调器的布局中:

    <Spinner 
            android:id="@+id/spinner"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:entries="@array/list_spinner"
        />
    

    你就完成了!

    额外: 如果您想让您的微调器响应微调器中的项目选择,请将此代码添加到包含 onCreate() 方法中微调器的布局的相应 .java 文件中:

    final Spinner spin=findViewById(R.id.spinner);
    spin.setOnItemSelectedListener(new OnItemSelectedListener() {
    
                @Override
                public void onItemSelected(AdapterView<?> arg0, View arg1,
                        int arg2, long arg3) {
                    // TODO Auto-generated method stub
                    String item_name=spin.getSelectedItem().toString();
    
                    Log.e("Selected item : ",item_name);
    }
    
                @Override
                public void onNothingSelected(AdapterView<?> arg0) {
                    // TODO Auto-generated method stub
    
                }
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多