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

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

相关推荐
陈大爷(有低保)24 分钟前
UDP Socket聊天室(Java)
java·网络协议·udp
kinlon.liu38 分钟前
零信任安全架构--持续验证
java·安全·安全架构·mfa·持续验证
王哲晓1 小时前
Linux通过yum安装Docker
java·linux·docker
java6666688881 小时前
如何在Java中实现高效的对象映射:Dozer与MapStruct的比较与优化
java·开发语言
Violet永存1 小时前
源码分析:LinkedList
java·开发语言
执键行天涯1 小时前
【经验帖】JAVA中同方法,两次调用Mybatis,一次更新,一次查询,同一事务,第一次修改对第二次的可见性如何
java·数据库·mybatis
Jarlen1 小时前
将本地离线Jar包上传到Maven远程私库上,供项目编译使用
java·maven·jar
蓑 羽1 小时前
力扣438 找到字符串中所有字母异位词 Java版本
java·算法·leetcode
Reese_Cool2 小时前
【C语言二级考试】循环结构设计
android·java·c语言·开发语言