我还通过使用以下代码解决了这个问题。假设你有一个项目列表。
ArrayList<Item> itemsArrayList = new ArrayList<Item>();
Item item1 = new Item();
item1.setId(1);
item1.setData("First Element");
Item item2 = new Item();
item2.setId(2);
Item2.setData("Second Element");
itemsArrayList.add(item1);
itemsArrayList.add(item2);
现在我们必须向spinner提供字符串,因为spinner无法理解对象。因此,我们将创建一个包含如下字符串项的新数组列表->
ArrayList<String> itemStringArrayList = new ArrayList<String>();
for(Item item : itemsArrayList) {
itemStringArrayList.add(item.getData());
}
现在我们有itemStringArrayList数组列表,包含两个字符串项。我们必须将“Select Item”文本显示为第一项。所以我们必须插入一个新的字符串到itemStringArrayList中。
itemStringArrayList.add("Select Item");
现在我们有一个数组列表itemsArrayList,我们想在下拉列表中显示两个元素。但这里的条件是…如果我们不选择任何东西,那么选择项目应该出现在第一个元素,这将不会被启用。
我们可以像这样实现这个功能。如果你需要将数组列表项加载到android spinner。所以你必须使用一些适配器。这里我将使用ArrayAdapter。我们也可以使用定制适配器。
ArrayAdapter<String> itemsArrayAdapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.spinner_item, itemsArrayList){
@Override
public boolean isEnabled(int position) {
if(position == 0)
{
return false;
}
else
{
return true;
}
}
@Override
public View getDropDownView(int position, View convertView,
ViewGroup parent) {
View view = super.getDropDownView(position, convertView, parent);
TextView tv = (TextView) view;
if(position == 0){
// Set the hint text color gray
tv.setTextColor(Color.GRAY);
}
else {
tv.setTextColor(Color.BLACK);
}
return view;
}
};
itemsArrayAdapter.setDropDownViewResource(R.layout.spinner_item);
your_spinner_name.setAdapter(itemsArrayAdapter);
在这个代码中。我们正在使用自定义的微调布局,即r.b ayout.spinner_item。这是一个简单的文本视图
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:textStyle="italic"
android:fontFamily="sans-serif-medium"
/>
我们需要禁用转轮中的第一个文本。对于0号位置,我们禁用了文本。颜色也可以通过覆盖getDropDownView方法来设置。这样我们就能得到预期的转轮。