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
    }
}

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

相关推荐
树若逝花若殇4 分钟前
基于Spring AOP优雅记录请求响应日志
java·spring boot
Yyyyyy~31 分钟前
【java】数组的定义和使用
java
麻辣布丁31 分钟前
java集合篇面试模拟
java·开发语言·面试
niucloud-admin33 分钟前
JAVA V6 多商户商城 开发文档——插件开发规范
java·开发语言
嘟哩DuliDuli1 小时前
创作 Agent 的任务状态该如何保存
android·java·javascript
wdfk_prog1 小时前
lely-canopen-rtt:为什么推荐在 RT-Thread 上使用 Lely CANopen 构建主站
java·运维·缓存·docker·容器
Token掘金室1 小时前
JSON模式结构化输出报错
java·服务器·json
秋饼1 小时前
Spring AI 2.0 接入 DeepSeek V4.1 Flash 生产级实战
java·ai·技术分享·后端开发
IT枫斗者枫哥1 小时前
Java 分批导出仍然 OOM?用 32 MiB 堆复现三种 CSV 写法
java