java - 从 Spinner 中删除 DropDownViewResource - java Android Studio

标签 java android spinner

我有一个像这样创建的微调器:

        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);

但是,我的“感觉”是每次我想要更改其背景时创建一个新的适配器并不是最好的方法。这是我尝试开发的第一个应用程序,因此我没有经验,但我怀疑如果重复多次,这种方法可能会耗尽资源。有人可以建议更好的方法或证实/伪造我的担忧吗? 谢谢

最佳答案

我建议您制作一个自定义适配器,您可以通过它进行任何您想要的自定义。

看看http://theopentutorials.com/tutorials/android/listview/android-custom-listview-with-image-and-text-using-baseadapter/

不要将自定义适配器扩展为数组适配器,但 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/

相关文章:

android - 如何获得 Spinner 值?

android - Android系统中的人脸检测

java - SQL密码安全

java - 过滤时给null一个意思,加上两个 boolean 值表示三元balue好不好?

java - 允许从测试构建文档的文档工具

android - 如何检测播放暂停按钮单击android中的mediacontroller

java - 如果我单击 jtable 中的一行,如何更改微调器和单选按钮的值(必须取决于 jtable 的值)

android - 如何设置微调器下拉 View 宽度?

java - 让 GWT 和 REST 协同工作

java - 抽象类和继承者: is it possible to "pull up" .parent()在这里?