java - 阻止 Android Spinner 删除列表

标签 java android kotlin android-spinner

我有一个 Android 微调器,当我的列表中的项目少于一项时,我想禁用它。我的意思是我希望显示标题,但我不希望在单击它时下拉列表。

我已经尝试过 isClickable = false 和 isEnabled = false 就像许多帖子中那样,但我仍然无法让它工作。

我成功地使用了微调器下拉图标,但我仍然可以单击文本并获取列表。

class CustomSpinnerAdapter(private val ctx: Context, val locations: List<Location>) : ArrayAdapter<Location>(ctx, R.layout.list_item_spinner_view) {
    override fun isEmpty() = locations.isEmpty()

    override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
        val context = parent.context
        val inflater = LayoutInflater.from(context)
        var view = convertView
        if (view == null)
            view = inflater.inflate(R.layout.list_item_spinner_view, parent, false)
        view!!.location_spinner_name.text = locations[position].name
        if (count < 2) {
            view.location_spinner.visibility = View.GONE
            view.better_name.isEnabled = false
            view.better_name.isClickable = false
        }

        view.location_spinner_name.typeface = Typeface.createFromAsset(ctx.assets, ctx.getString(R.string.font_bold))
        return view
    }

这是我的标题的 View

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:id="@+id/better_name">

<TextView
          android:id="@+id/location_spinner_name"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:singleLine="true"
          style="@style/TextAppearance.Widget.AppCompat.Toolbar.Title"/>

    <com.ge.cbyge.view.TintableImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_arrow_drop_down_black"
        android:tint="@color/medium_gray"
        android:paddingTop="@dimen/activity_home_spinner_dropdown_padding_top"/>

</LinearLayout>

最佳答案

希望这会有所帮助。它不是对您的应用程序的重写,但也许是您可以集成的想法:

您可以像这样创建自己的 Spinner 类:

class MySpinner extends AppCompatSpinner {


public MySpinner(Context context) {
    super(context);
}

public MySpinner(Context context, AttributeSet attrs) {
    super(context, attrs);
}

@Override
public boolean performClick() {
    if ( getCount() == 0 ) {
        return true; // we do nothing because adapter contents = 0
    }
    else {
        return super.performClick(); // we proceed as normal
    }
}

}

然后将 XML 引用从“Spinner”更改为“[yourPackageName].MySpinner”

关于java - 阻止 Android Spinner 删除列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49523641/

相关文章:

Java Ant 任务使用错误的解释器(java.exe 而不是 javaw.exe)

java - 迭代字符串。搜索特殊字符。使用正则表达式

java - Android 设备中的帐户注册问题

android - 如何等待协程结束

android - Kotlin Observer lambda 语法?

java - 非法状态异常 : ArrayAdapter requires the resource ID to be a TextView

java - 如何使用ASM ClassVisitor.visitOuterClass?

android - 默认语言的 MissingTranslation( "..."未在 "en"中翻译)

java - 使用 ant 引用 jar(不是/libs)的外部文件夹

firebase - 如何使用 Kotlin 协程运行 Firebase 事务?