如何在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是的,你是对的,但他没有问其他可能的方法。所以必须根据问题给出答案…建议应该在评论中提及。如何在这个小部件中执行类似搜索?…目前它的搜索类似于。等于内容。