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 不显示数组和文本的主要内容,如果未能解决你的问题,请参考以下文章