Spinner使用所遇问题及自定义adapter

xiaoxiao2021-02-28  53

一、使用spinner时遇到的问题     1.传统使用apapter的方法 1 String[] strs = new String[]{}; 2 ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, strs);     3 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 4 spinner.setAdapter(adapter);     2.使用存在问题,当需要变更adapter数据时,我当时是直接将 strs 的值改变,然后通知adapter进行刷新,以为会和listview平时用法相同,但是结果显示,这样根本无法修改spinner的数据及ui     3.出现这一现象的原因:listview的传值一般是用的 list 集合,对集合进行修改是 list.add() ,这是没问题的,但是我们spinner传递的是striing[],它作为参数传递后,adapter保存的是它的地址值,而你后续再更改 strs ,是将 strs 重新赋值了,但是不影响adapter实际访问的地址,所以没做修改     4.解决方法:将ArrayAdapter的内部类型限制去掉,第三个参数传list,之后可以通过list.add()等方法修改ui显示,示例: 1 List<String> list = new ArrayList<>(); 2 ArrayAdapter<> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, list);     3 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 4 spinner.setAdapter(adapter); 二、自定义adapter 1.adapter需继承BaseAdapter 2.其中的getView是定义的spinner的显示选中内容框的布局及具体操作,getDropDownView,是定义的下拉选择框的布局及具体操作 3.示例中是用的同一个布局,只做了textview是否仅显示一行的区分 4.当然可以在布局中自定义间距,大小,颜色等限制 5.使用方法: 1 spinner.setAdapter(new MySpinnerAdapter(this, lists)); 1 class MySpinnerAdapter extends BaseAdapter { 2 3    private Context context; 4    private List<String> lists; 5 6    public MySpinnerAdapter(Context context, List<String> lists) { 7        this.context = context; 8        this.lists = lists; 9   } 10 11    @Override 12    public int getCount() { 13        return lists.size(); 14   } 15 16    @Override 17    public Object getItem(int position) { 18        return lists.get(position); 19   } 20 21    @Override 22    public long getItemId(int position) { 23        return position; 24   } 25 26    @Override 27    public View getView(int position, View convertView, ViewGroup parent) { 28        View view = 29                LayoutInflater.from(context).inflate(R.layout.item_spinner, null); 30        TextView tv_zlb = (TextView) view.findViewById(R.id.tv_zlb); 31        tv_zlb.setText(lists.get(position)); 32        tv_zlb.setSingleLine(); 33        tv_zlb.setEllipsize(TextUtils.TruncateAt.END); 34        return view; 35   } 36 37    @Override 38    public View getDropDownView(int position, View convertView, ViewGroup parent) { 39        View view = LayoutInflater.from(context).inflate(R.layout.item_spinner, null); 40        TextView tv_zlb = (TextView) view.findViewById(R.id.tv_zlb); 41        tv_zlb.setText(lists.get(position)); 42        return view; 43   } 44 } 另附上简单的item布局 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3    android:layout_width="wrap_content" 4    android:layout_height="wrap_content" 5    android:orientation="vertical" 6    android:paddingBottom="@dimen/dimen15" 7    android:paddingLeft="@dimen/dimen10" 8    android:paddingTop="@dimen/dimen15"> 9 10    <TextView 11        android:id="@+id/tv_zlb" 12        style="@style/text_gray_style" 13        android:layout_width="wrap_content" 14        android:layout_height="wrap_content" 15        android:textColor="@color/black" 16        android:textSize="@dimen/dimen16" /> 17 18 </LinearLayout>
转载请注明原文地址: https://www.6miu.com/read-80153.html

最新回复(0)