我有一个像这样创建的微调器:
operatorSpinner = new Spinner(this);
operatorSpinnerArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, operatorSpinnerArray);
operatorSpinnerArrayAdapter.setDropDownViewResource(R.layout.spinner_item);
operatorSpinner.setAdapter(operatorSpinnerArrayAdapter);
布局,spinner_item是这样的:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="28dip"
android:layout_height="28dip"
android:gravity="center"
android:background="@drawable/circle"
android:textColor="#a4a3a3" />
我应用此布局的原因是向微调器下拉列表中每个项目的背景添加一个圆圈。但是,我只希望在某些条件下应用圆形背景,因此我需要一种方法来以编程方式删除该资源中的 DropDownViewResource 或布局背景。
我尝试过这个:
operatorSpinnerArrayAdapter.setDropDownViewResource(0);
但它导致应用程序在该代码执行时崩溃。我找到了一种方法来实现我想要的,通过用新的适配器替换适配器,如下所示:
operatorSpinnerArrayAdapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_dropdown_item, operatorSpinnerArray);
operatorSpinner.setAdapter(operatorSpinnerArrayAdapter);
但是,我的“感觉”是每次我想要更改其背景时创建一个新的适配器并不是最好的方法。这是我尝试开发的第一个应用程序,因此我没有经验,但我怀疑如果重复多次,这种方法可能会耗尽资源。有人可以建议更好的方法或证实/伪造我的担忧吗? 谢谢
最佳答案
我建议您制作一个自定义适配器,您可以通过它进行任何您想要的自定义。
不要将自定义适配器扩展为数组适配器,但 BaseAdapter。您需要传递一个 RowItem,例如
class RowItem{
...
boolean isConditionSatisfied;
...
}
并在您的适配器中将 getView() 重写为
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
LayoutInflater mInflater = (LayoutInflater)
context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_item, null);
holder = new ViewHolder();
holder.txtDesc = (TextView) convertView.findViewById(R.id.desc);
holder.txtTitle = (TextView) convertView.findViewById(R.id.title);
holder.imageView = (ImageView) convertView.findViewById(R.id.icon);
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
RowItem rowItem = (RowItem) getItem(position);
holder.txtDesc.setText(rowItem.getDesc());
holder.txtTitle.setText(rowItem.getTitle());
holder.imageView.setImageResource(rowItem.getImageId());
if(isConditionSatisfied){
convertView.setBackground(R.drawable.your_drawable);
}
return convertView;
}
关于java - 从 Spinner 中删除 DropDownViewResource - java Android Studio,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33735474/