Spinner 不显示数组和文本

Posted

技术标签:

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

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

 android:id="@+id/spinner"
        android:layout_
        android:layout_
        />```

``` 微调器微调器;
    数组列表微调器数组列表;
    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 链接中提供的内容。 【参考方案1】:

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

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

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

    在代码末尾或更改 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_
        android:layout_
        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

            
    );

【讨论】:

以上是关于Spinner 不显示数组和文本的主要内容,如果未能解决你的问题,请参考以下文章

Android Spinner 下拉箭头不显示

如何制作带有初始文本“Select One”的Android Spinner?

android spinner默认啥都不选择

关于android开发spinner显示的问题

RecyclerView 最初不加载数据

使用单击 Spinner 项刷新 ArrayList 以将新数据显示到 RecyclerView