Android实现自定义下拉列表绑定数据

xml界面代码:

bash 复制代码
  <LinearLayout
                android:id="@+id/LinearLayout_warehouse7"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center_vertical"
                android:layout_marginBottom="10dp"
                android:orientation="horizontal">

                <TextView
                    android:id="@+id/textView61"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="@string/txt_return_warehosing"
                    android:textAlignment="viewEnd" />


                <AutoCompleteTextView
                    android:id="@+id/AutoCompleteTextView_house"
                    android:layout_width="120dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"

                    android:cacheColorHint="#00000000"
                    android:completionThreshold="1"
                    android:dropDownHorizontalOffset="5dp"
                    android:ems="10"
                    android:gravity="center_vertical"
                    android:hint="请输入或选择"
                    android:textSize="14sp">

<!--                    <requestFocus />-->
                </AutoCompleteTextView>

                <ImageButton
                    android:id="@+id/ImageButton_house"
                    android:layout_width="10dp"
                    android:layout_height="fill_parent"
                    android:layout_weight="1"
                    android:src="@android:drawable/btn_dropdown"
                    android:textSize="14sp" />
            </LinearLayout>

            <LinearLayout
                android:id="@+id/LinearLayout_location7"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center_vertical"
                android:orientation="horizontal">

                <TextView
                    android:id="@+id/textView71"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"

                    android:layout_weight="1"
                    android:text="@string/txt_return_location_name"
                    android:textAlignment="viewEnd" />

                <AutoCompleteTextView
                    android:id="@+id/AutoCompleteTextView_location_name"
                    android:layout_width="120dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"

                    android:cacheColorHint="#00000000"
                    android:completionThreshold="1"
                    android:dropDownHorizontalOffset="5dp"
                    android:ems="10"
                    android:gravity="center_vertical"
                    android:hint="请输入或选择"
                    android:textSize="14sp">

<!--                    <requestFocus />-->
                </AutoCompleteTextView>

                <ImageButton
                    android:id="@+id/ImageButton_location_name"
                    android:layout_width="10dp"
                    android:layout_height="fill_parent"
                    android:layout_weight="1"
                    android:src="@android:drawable/btn_dropdown"
                    android:textSize="14sp" />
            </LinearLayout>

java实现自定义适配器代码:

bash 复制代码
    public class CustomAutoCompleteAdapter extends ArrayAdapter<KeyValueItem> {

        private Context context;
        private int resource;
        List<KeyValueItem> itemList;
        KeyValueItem KeyValueItem_select=null;
        public CustomAutoCompleteAdapter(Context context, int resource, List<KeyValueItem> objects) {
            super(context, resource, objects);
            this.context = context;
            this.resource = resource;
        }
//        @Override
//        public KeyValueItem getItem(int position) {
//            // TODO Auto-generated method stub
//            return itemList.get(position);
//        }
//        @Override
//        public long getItemId(int position) {
//            // TODO Auto-generated method stub
//            return position;
//        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // 尝试重用convertView来优化性能
            if (convertView == null) {
                LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = inflater.inflate(resource, parent, false);
            }

            TextView textView_Key = convertView.findViewById(R.id.TextView_Key);
            TextView textView_value = convertView.findViewById(R.id.TextView_value);

            textView_Key.setText(getItem(position).getKey());
            textView_value.setText(getItem(position).getValue());

            textView_Key.setVisibility(View.GONE);
            // 这里不需要再设置字体大小,因为它已经在布局文件中设置了

            textView_value.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    KeyValueItem_select=(KeyValueItem)getItem(position);
                    Log.d("data1", "5value:"+KeyValueItem_select.getValue()+"-"+KeyValueItem_select.getKey());
                    AutoCompleteTextView_house.setText(KeyValueItem_select.getValue());
                    AutoCompleteTextView_house.dismissDropDown();
                    AutoCompleteTextView_house.clearFocus();


                }
            });
            textView_Key.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    KeyValueItem_select=(KeyValueItem)getItem(position);
                    Log.d("data1", "6value:"+KeyValueItem_select.getValue()+"-"+KeyValueItem_select.getKey());
                    AutoCompleteTextView_house.setText(KeyValueItem_select.getValue());
                    AutoCompleteTextView_house.dismissDropDown();
                    AutoCompleteTextView_house.clearFocus();
                }

            });
            return convertView;
        }
    }



    public class CustomAutoCompleteLocationAdapter extends ArrayAdapter<KeyValueItem> {

        private Context context;
        private int resource;
        List<KeyValueItem> itemList;
        KeyValueItem KeyValueItem_select=null;
        public CustomAutoCompleteLocationAdapter(Context context, int resource, List<KeyValueItem> objects) {
            super(context, resource, objects);
            this.context = context;
            this.resource = resource;
        }
        //        @Override
//        public KeyValueItem getItem(int position) {
//            // TODO Auto-generated method stub
//            return itemList.get(position);
//        }
//        @Override
//        public long getItemId(int position) {
//            // TODO Auto-generated method stub
//            return position;
//        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // 尝试重用convertView来优化性能
            if (convertView == null) {
                LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = inflater.inflate(resource, parent, false);
            }

            TextView textView_Key = convertView.findViewById(R.id.TextView_Key);
            TextView textView_value = convertView.findViewById(R.id.TextView_value);

            textView_Key.setText(getItem(position).getKey());
            textView_value.setText(getItem(position).getValue());

            textView_Key.setVisibility(View.GONE);
            // 这里不需要再设置字体大小,因为它已经在布局文件中设置了

            textView_value.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    KeyValueItem_select=(KeyValueItem)getItem(position);
                    Log.d("data1", "5value:"+KeyValueItem_select.getValue()+"-"+KeyValueItem_select.getKey());
                    AutoCompleteTextView_location_name.setText(KeyValueItem_select.getValue());
                    AutoCompleteTextView_location_name.dismissDropDown();
                    AutoCompleteTextView_location_name.clearFocus();


                }
            });
            textView_Key.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    KeyValueItem_select=(KeyValueItem)getItem(position);
                    Log.d("data1", "6value:"+KeyValueItem_select.getValue()+"-"+KeyValueItem_select.getKey());
                    AutoCompleteTextView_location_name.setText(KeyValueItem_select.getValue());
                    AutoCompleteTextView_location_name.dismissDropDown();
                    AutoCompleteTextView_location_name.clearFocus();
                }

            });
            return convertView;
        }
    }

定义适配器初始化代码:

bash 复制代码
 CustomAutoCompleteAdapter adapter_house=null;
    CustomAutoCompleteLocationAdapter adapter_location=null;
    List<KeyValueItem> itemList=new ArrayList<KeyValueItem>();
    List<KeyValueItem> itemList_location=new ArrayList<KeyValueItem>();
     private AutoCompleteTextView AutoCompleteTextView_house;
    private AutoCompleteTextView AutoCompleteTextView_location_name;
AutoCompleteTextView_house = (AutoCompleteTextView) this.findViewById(R.id.AutoCompleteTextView_house);
        AutoCompleteTextView_location_name = (AutoCompleteTextView) this.findViewById(R.id.AutoCompleteTextView_location_name);
  KeyValueItem keyValueItem1=new KeyValueItem("001","仓库1");
        KeyValueItem keyValueItem2=new KeyValueItem("002","仓库2");
        KeyValueItem keyValueItem3=new KeyValueItem("003","仓库3");

        itemList.add(keyValueItem1);
        itemList.add(keyValueItem2);
        itemList.add(keyValueItem3);

        http_GetWarehouse(OrganizationNo);
//       ArrayAdapter<KeyValueItem> arrayAdapter_house2 = new ArrayAdapter<KeyValueItem>(this,
//                R.layout.list_item_layout, itemList );
//        AutoCompleteTextView_house.setAdapter(arrayAdapter_house2);

         adapter_house = new CustomAutoCompleteAdapter(this, R.layout.list_item_layout, itemList);
        AutoCompleteTextView_house.setAdapter(adapter_house);
 ImageButton button_house = (ImageButton) this.findViewById(R.id.ImageButton_house);
        button_house.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // 显示下拉框
                AutoCompleteTextView_house.showDropDown();


                //Log.d("data1", "value:"+AutoCompleteTextView_house.getText().toString());
            }
        });

        AutoCompleteTextView_house.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

               // Log.d("data1", "2value:"+AutoCompleteTextView_house.getText().toString());
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

//                Log.d("data1", "3value:"+AutoCompleteTextView_house.getText().toString());
//
//                if(adapter2.KeyValueItem_select!=null){
//                    String key= adapter2.KeyValueItem_select.getKey();
//                    Log.d("data1", "3key:"+key);
//                }

            }

            @Override
            public void afterTextChanged(Editable s) {

               // AutoCompleteTextView_house.clearFocus();
                Log.d("data1", "4value:"+AutoCompleteTextView_house.getText().toString());

                if(adapter_house.KeyValueItem_select!=null){
                    String key= adapter_house.KeyValueItem_select.getKey();
                    String value= adapter_house.KeyValueItem_select.getValue();

                    if(key!=null&&key!=""&&key.length()>0){
                        Log.d("data1", "4key:"+key+"-"+value);

                        http_GetLocation(key);
                        warehouse_no2=key;
                        warehouse_name2=value;

                    }else {
                        itemList_location.clear();
                        warehouse_no2="";
                        warehouse_name2="";
                        adapter_location.notifyDataSetChanged();
                    }

                }
            }
        });




        ImageButton button_location_name = (ImageButton) this.findViewById(R.id.ImageButton_location_name);
        button_location_name.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // 显示下拉框
                AutoCompleteTextView_location_name.showDropDown();
            }
        });



        KeyValueItem keyValueItem4=new KeyValueItem("001","仓位1");
        KeyValueItem keyValueItem5=new KeyValueItem("002","仓位2");
        KeyValueItem keyValueItem6=new KeyValueItem("003","仓位3");

        itemList_location.add(keyValueItem4);
        itemList_location.add(keyValueItem5);
        itemList_location.add(keyValueItem6);


         adapter_location = new CustomAutoCompleteLocationAdapter(this, R.layout.list_item_layout, itemList_location);
        AutoCompleteTextView_location_name.setAdapter(adapter_location);


        AutoCompleteTextView_location_name.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                // Log.d("data1", "2value:"+AutoCompleteTextView_house.getText().toString());
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

//                Log.d("data1", "3value:"+AutoCompleteTextView_house.getText().toString());
//
//                if(adapter2.KeyValueItem_select!=null){
//                    String key= adapter2.KeyValueItem_select.getKey();
//                    Log.d("data1", "3key:"+key);
//                }

            }

            @Override
            public void afterTextChanged(Editable s) {

               // AutoCompleteTextView_location_name.clearFocus();
                Log.d("data1", "4仓位value:"+AutoCompleteTextView_location_name.getText().toString());

                if(adapter_location.KeyValueItem_select!=null){
                    String key= adapter_location.KeyValueItem_select.getKey();
                    String value= adapter_location.KeyValueItem_select.getValue();

                    if(key!=null&&key!=""&&key.length()>0){

                        location_no2=key;
                        location_name2=value;
                        Log.d("data1", "4仓位key:"+key+"-"+value);
                    }else {
                        location_no2="";
                        location_name2="";
                    }

                }
            }
        });

适配器代码:

bash 复制代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"  >


    <TextView
        android:id="@+id/TextView_value"
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:layout_weight="1"
        android:background="@drawable/textview_right_border_simple"
        android:textAlignment="center"
        android:textColor="@android:color/black"
        android:textSize="14sp" />

    <TextView
        android:id="@+id/TextView_Key"
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:background="@drawable/textview_right_border_simple"
        android:textAlignment="center"
        android:textColor="#005500"
        android:textSize="12sp" />

</LinearLayout>

绑定数据实体类

bash 复制代码
public class KeyValueItem {

    private String key;
    private String value;
    public KeyValueItem() {

    }

    public void setKey(String key) {
        this.key = key;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public KeyValueItem(String key, String value) {
        this.key = key;
        this.value = value;
    }

    public String getKey() {
        return key;
    }

    public String getValue() {
        return value;
    }

    @Override
    public String toString() {


        return value; // AutoCompleteTextView显示value
    }
}

以上就是绑定下拉列表数据代码

相关推荐
一线大码12 分钟前
SpringBoot 优雅实现接口的多实现类方式
java·spring boot·后端
2501_9159214315 分钟前
iOS 应用代上架流程,多工具组合与使用 开心上架 跨平台自动化上传指南
android·ios·小程序·uni-app·自动化·cocoa·iphone
花伤情犹在17 分钟前
Java Stream 高级应用:优雅地扁平化(FlatMap)递归树形结构数据
java·stream·function·flatmap
日日行不惧千万里20 分钟前
2025最新仿默往 IM 即时通讯系统源码(PC + Web + iOS + Android)完整版发布!
android·ios
歪歪10021 分钟前
React Native开发Android&IOS流程完整指南
android·开发语言·前端·react native·ios·前端框架
雪芽蓝域zzs26 分钟前
uniapp 修改android包名
android·uni-app
yaoxin52112330 分钟前
212. Java 函数式编程风格 - Java 编程风格转换:命令式 vs 函数式(以循环为例)
java·开发语言
摇滚侠40 分钟前
Spring Boot 3零基础教程,WEB 开发 Thymeleaf 属性优先级 行内写法 变量选择 笔记42
java·spring boot·笔记
滑水滑成滑头41 分钟前
**发散创新:多智能体系统的探索与实践**随着人工智能技术的飞速发展,多智能体系统作为当今研究的热点领域,正受到越来越多关注
java·网络·人工智能·python
摇滚侠44 分钟前
Spring Boot 3零基础教程,WEB 开发 Thymeleaf 总结 热部署 常用配置 笔记44
java·spring boot·笔记