如何在Android中使用Spinner实现搜索?

如何在Android中使用Spinner实现搜索?,android,Android,我的微调器的代码如下: String[] countryNames = {"Select Country", "India", "China", "Australia", "Portugle", "America", "New Zealand"}; Spinner spinner = (Spinner) findViewById(R.id.simpleSpinner); hintAdapter = new CustomArrayAdapter(getApplicationContext()

我的
微调器的代码如下:

String[] countryNames = {"Select Country", "India", "China", "Australia",   "Portugle", "America", "New Zealand"};

Spinner spinner = (Spinner) findViewById(R.id.simpleSpinner);
hintAdapter = new CustomArrayAdapter(getApplicationContext(), R.layout.simple_row,countriesList,getApplicationContext());
spinner.setAdapter(hintAdapter);
我想在
微调器中实现搜索


我如何才能做到这一点?

选择AutocompleteTextview

使用SearchableSpinner库,有可用的SearchableSpinner库列表,只需从中选择一个更好的

我找到了以下解决方案:

/**
*修改后的微调器,不会自动选择列表中的第一个条目。
*
*如果未选择任何内容,则显示提示。
*
*限制:如果条目列表为空,则不显示提示。
*/
公共类NoDefaultSpinner扩展了Spinner{
公共节点默认微调器(上下文){
超级(上下文);
}
公共节点默认微调器(上下文、属性集属性){
超级(上下文,attrs);
}
公共节点默认微调器(上下文上下文、属性集属性、int-defStyle){
超级(上下文、属性、定义样式);
}
@凌驾
公共无效设置适配器(SpinnerAdapter orig){
最终SpinnerAdapter适配器=新代理(原始);
super.setAdapter(适配器);
试一试{
最终方法m=AdapterView.class.getDeclaredMethod(
“setNextSelectedPositionInt”,int.class);
m、 setAccessible(true);
m、 调用(这个-1);
最终方法n=AdapterView.class.getDeclaredMethod(
“设置选定位置int”,int.class);
n、 setAccessible(true);
n、 调用(这个-1);
} 
捕获(例外e){
抛出新的运行时异常(e);
}
}
受保护的SpinnerAdapter新代理(SpinnerAdapter obj){
返回(SpinnerAdapter)java.lang.reflect.Proxy.newProxyInstance(
obj.getClass().getClassLoader(),
新类[]{SpinnerAdapter.Class},
新Spinneraladperpoxy(obj));
}
/**
*截取getView()以在位置<0时显示提示
*/
受保护的类spinneradeproxy实现调用处理程序{
受保护的旋转变压器;
受保护的方法getView;
受保护的SpinnerAdapterProxy(SpinnerAdapter obj){
this.obj=obj;
试一试{
this.getView=SpinnerAdapter.class.getMethod(
“getView”、int.class、View.class、ViewGroup.class);
} 
捕获(例外e){
抛出新的运行时异常(e);
}
}
公共对象调用(对象代理、方法m、对象[]args)抛出可丢弃的{
试一试{
返回m.equals(getView)和

(Integer)(args[0])在尝试了许多库和方法之后,我终于创建了我的自定义可搜索微调器。我附加的代码处于非常初级的阶段,我将像在我的项目中一样进行更新。我还编写了如何使用它的完整方法

所有布局 可搜索的\u spinner.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    <EditText
        android:id="@+id/spinner_search_bar"
        android:layout_width="match_parent"
        android:layout_height="35dp"
        android:hint="Select A Company"
        android:cursorVisible="false"
        android:background="@drawable/white_rect_fillet_border"
        android:paddingHorizontal="10dp"/>
    
    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/ledger_list"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:visibility="gone"
        android:layout_marginHorizontal="10dp"/>
</LinearLayout>
</FrameLayout>
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
<TableRow>
    <TextView
        android:id="@+id/txt"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingVertical=5dp"
        android:gravity="center_vertical"/>
</TableRow>
</TableLayout>
<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="rectangle"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@android:color/white"/>
    <corners android:radius="5dp" />
    <stroke android:color="@android:color/darker_gray"
        android:width="1dp" />
</shape>

actity\u或\u frag\u layout.xml记住将此作为最后一个,并根据父布局对齐

<FrameLayout
    android:id="@+id/spinner_frame"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginHorizontal="10dp"
    android:layout_marginTop="10dp"
    android:background="@drawable/white_rect_fillet_border"
    app:layout_constraintTop_toTopOf="parent">

    <include layout="@layout/searchable_spinner" />
</FrameLayout>

列出适配器元素.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    <EditText
        android:id="@+id/spinner_search_bar"
        android:layout_width="match_parent"
        android:layout_height="35dp"
        android:hint="Select A Company"
        android:cursorVisible="false"
        android:background="@drawable/white_rect_fillet_border"
        android:paddingHorizontal="10dp"/>
    
    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/ledger_list"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:visibility="gone"
        android:layout_marginHorizontal="10dp"/>
</LinearLayout>
</FrameLayout>
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
<TableRow>
    <TextView
        android:id="@+id/txt"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingVertical=5dp"
        android:gravity="center_vertical"/>
</TableRow>
</TableLayout>
<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="rectangle"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@android:color/white"/>
    <corners android:radius="5dp" />
    <stroke android:color="@android:color/darker_gray"
        android:width="1dp" />
</shape>


实现一个
autocompletedittext
使用
android.widget.AutoCompleteTextView
如果你不想
AutoCompleteTextView
那么请检查这个答案,解释一下你想如何“搜索”您的
微调器
?我的列表最初显示在微调器中。我想在微调器顶部搜索Preetika AutoComplete是不同的场景。在微调器列表中首先出现的是他的要求不是AutoCompleteTextview这只是一个建议,提出此问题的人可以选择此选项,您不能说这不是他的要求我记得他可能没有意识到这件事@brahmyadigopula@PreetikaKaur是的,你是对的,但他没有问其他可能的方法。所以必须根据问题给出答案…建议应该在评论中提及。如何在这个小部件中执行类似搜索?…目前它的搜索类似于。等于内容。