地址选择器AddRessSelecrtion (我喜欢直接上代码,很简单)

效果图//

 
public class AddRessSelection extends LinearLayout implements View.OnClickListener {

    private Context context;
    private List<String> province;
    private List<String> citys;
    private List<String> countys;
    private View addressView;
    private View dialog_line_province;
    private View dialog_line_city;
    private View dialog_line_district;
    private TextView dialog_tv_province;
    private TextView dialog_tv_city;
    private TextView dialog_tv_district;
    private RelativeLayout dialog_ll_province;
    private RelativeLayout dialog_ll_city;
    private RelativeLayout dialog_ll_district;
    private ListView dialog_listView;
    private AddRessListViewAdapter adapter;

    public AddRessSelection(Context context) {
        this(context, null);
    }

    public AddRessSelection(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public AddRessSelection(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        this.context = context;
        init();
    }

    /**
     * 初始化可视化布局
     */
    private void init() {
        addressView = View.inflate(context, R.layout.address_selection_dialog, this);
        initDialogView();
    }

    /**
     * 初始化Dialog显示的控件
     */
    private void initDialogView() {
        //指示器
        dialog_line_province = addressView.findViewById(R.id.dialog_line_province);
        dialog_line_city = addressView.findViewById(R.id.dialog_line_city);
        dialog_line_district = addressView.findViewById(R.id.dialog_line_district);
        //选中地址显示
        dialog_tv_province = addressView.findViewById(R.id.dialog_tv_province);
        dialog_tv_city = addressView.findViewById(R.id.dialog_tv_city);
        dialog_tv_district = addressView.findViewById(R.id.dialog_tv_district);
        //指示器外框
        dialog_ll_province = addressView.findViewById(R.id.dialog_ll_province);
        dialog_ll_city = addressView.findViewById(R.id.dialog_ll_city);
        dialog_ll_district = addressView.findViewById(R.id.dialog_ll_district);

        dialog_listView = addressView.findViewById(R.id.dialog_lv_location_dialog);
        initDialogClick();
    }

    /**
     * 初始化Dialog中的点击事件
     */
    private void initDialogClick() {
        dialog_ll_province.setOnClickListener(this);
        dialog_ll_city.setOnClickListener(this);
        dialog_ll_district.setOnClickListener(this);
    }

    /**
     * 设置省份数据源
     *
     * @param province
     */
    public void setProvinceData(List<String> province) {
        if (province == null) {
            new NullPointerException("Data source is empty");
            return;
        }
        setDialodLvAdapter(province);
        this.province = province;
    }

    /**
     * 设置市级数据源
     *
     * @param city
     */
    public void setCityData(List<String> city) {
        if (city == null) {
            new NullPointerException("Data source is empty");
            return;
        }
        this.citys = city;
    }

    /**
     * 设置县级数据源
     *
     * @param county
     */
    public void setCountyData(List<String> county) {
        if (county == null) {
            new NullPointerException("Data source is empty");
            return;
        }
        this.countys = county;
    }

    @Override
    public void onClick(View view) {
        String dialogProvince = dialog_tv_province.getText().toString();
        String dialogCity = dialog_tv_city.getText().toString();
        switch (view.getId()) {

            case R.id.dialog_ll_province:
                dialog_tv_province.setText("选择省");
                adapter = null;
                setDialodLvAdapter(province);
                dialog_line_province.setVisibility(VISIBLE);
                dialog_line_city.setVisibility(INVISIBLE);
                dialog_line_district.setVisibility(INVISIBLE);
                dialog_tv_city.setText("选择市");
                dialog_tv_district.setText("选择区县");
                break;
            case R.id.dialog_ll_city:
                if (dialogProvince.equals("选择省") || dialogProvince == null) {
                    Toast.makeText(context, "请先选择省", Toast.LENGTH_SHORT).show();
                    return;
                }
                adapter = null;
                setDialodLvAdapter(citys);
                dialog_line_city.setVisibility(VISIBLE);
                dialog_line_province.setVisibility(INVISIBLE);
                dialog_line_district.setVisibility(INVISIBLE);
                dialog_tv_district.setText("选择区县");
                break;
            case R.id.dialog_ll_district:
                if (dialogProvince.equals("选择省") || dialogProvince == null) {
                    Toast.makeText(context, "请先选择省", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (dialogCity.equals("选择市") || dialogCity == null) {
                    Toast.makeText(context, "请先选择市", Toast.LENGTH_SHORT).show();
                    return;
                }
                adapter = null;
                setDialodLvAdapter(countys);
                dialog_line_district.setVisibility(VISIBLE);
                dialog_line_city.setVisibility(INVISIBLE);
                dialog_line_province.setVisibility(INVISIBLE);
                break;
        }
    }

    /**
     * 设置Dialog listview 适配器
     *
     * @param data
     */
    private void setDialodLvAdapter(List<String> data) {
        adapter = new AddRessListViewAdapter(data);
        dialog_listView.setAdapter(adapter);
    }

    /**
     * 地址LV  适配器
     */
    class AddRessListViewAdapter extends BaseAdapter {

        private List<String> addRessdData;

        public AddRessListViewAdapter(List<String> addRessdData) {
            this.addRessdData = addRessdData;
        }

        @Override
        public int getCount() {
            return addRessdData.size();
        }

        @Override
        public Object getItem(int i) {
            return addRessdData.get(i);
        }

        @Override
        public long getItemId(int i) {
            return i;
        }

        @Override
        public View getView(final int i, View view, ViewGroup viewGroup) {
            ViewHolder vh;
            if (view == null) {
                vh = new ViewHolder();
                view = View.inflate(context, R.layout.address_selection_listview_item, null);
                vh.textView = view.findViewById(R.id.address_lv_item_text);
                view.setTag(vh);
            } else {
                vh = (ViewHolder) view.getTag();
            }
            vh.textView.setText(addRessdData.get(i));
            vh.textView.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (dialog_line_province.getVisibility() == View.VISIBLE) {
                        dialog_tv_province.setText(province.get(i).toString());
                        dialog_line_city.setVisibility(View.VISIBLE);
                        dialog_line_province.setVisibility(INVISIBLE);
                        dialog_line_district.setVisibility(INVISIBLE);
                        setDialodLvAdapter(citys);
                    } else if (dialog_line_city.getVisibility() == View.VISIBLE) {
                        dialog_line_city.setVisibility(INVISIBLE);
                        dialog_line_district.setVisibility(View.VISIBLE);
                        dialog_tv_city.setText(citys.get(i).toString());
                        setDialodLvAdapter(countys);
                    } else if (dialog_line_district.getVisibility() == View.VISIBLE) {
                        dialog_tv_district.setText(countys.get(i).toString());
                    }
                }
            });
            return view;
        }

        class ViewHolder {
            TextView textView;
        }

    }

}

 


///

 

XML代码:

/
 

<?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="match_parent"
    android:background="@drawable/shape_white_10"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="80px"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:orientation="horizontal">

        <!--  省份 -->
        <RelativeLayout
            android:id="@+id/dialog_ll_province"
            android:layout_width="wrap_content"
            android:layout_height="80px"
            android:layout_weight="1"
            android:orientation="vertical">

            <TextView
                android:id="@+id/dialog_tv_province"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:text="选择省"
                android:textColor="@color/color333333"
                android:textSize="30px" />

            <View
                android:id="@+id/dialog_line_province"
                android:layout_width="80px"
                android:layout_height="4px"
                android:layout_alignParentBottom="true"
                android:layout_centerHorizontal="true"
                android:background="#4cd742"></View>
        </RelativeLayout>

        <!-- 市级 -->
        <RelativeLayout
            android:id="@+id/dialog_ll_city"
            android:layout_width="wrap_content"
            android:layout_height="80px"
            android:layout_weight="1"
            android:orientation="vertical">

            <TextView
                android:id="@+id/dialog_tv_city"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:text="选择市"
                android:textColor="@color/color333333"
                android:textSize="30px" />

            <View
                android:id="@+id/dialog_line_city"
                android:layout_width="80px"
                android:layout_height="4px"
                android:layout_alignParentBottom="true"
                android:layout_centerHorizontal="true"
                android:background="#4cd742"
                android:visibility="invisible"></View>
        </RelativeLayout>

        <!-- 县级 -->
        <RelativeLayout
            android:id="@+id/dialog_ll_district"
            android:layout_width="wrap_content"
            android:layout_height="80px"
            android:layout_weight="1"
            android:orientation="vertical">

            <TextView
                android:id="@+id/dialog_tv_district"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:text="选择区"
                android:textColor="@color/color333333"
                android:textSize="30px" />

            <View
                android:id="@+id/dialog_line_district"
                android:layout_width="80px"
                android:layout_height="4px"
                android:layout_alignParentBottom="true"
                android:layout_centerHorizontal="true"
                android:background="#4cd742"
                android:visibility="invisible"></View>
        </RelativeLayout>
    </LinearLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="2px"
        android:background="#eaf0f0" />


    <View
        android:layout_width="match_parent"
        android:layout_height="2px"
        android:background="#eaf0f0" />

    <ListView
        android:id="@+id/dialog_lv_location_dialog"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></ListView>
</LinearLayout>



剩下的颜色什么的 代码就不贴了 这个你们想定义成什么颜色都可以



简单用法:我这里是模拟数据 你们到时候可以用到你们真实的数据


在Activity 或者 Fragment 中使用

@Override
protected void initChildFragData1() {
    for (int i = 0; i < 30; i++) {
        provinces.add("某某省" + i);
    }
    for (int i = 0; i < 30; i++) {
        citys.add("某某市" + i);
    }
    for (int i = 0; i < 30; i++) {
        districts.add("某某县" + i);
    }
    addRessSelection.setProvinceData(provinces);
    addRessSelection.setCityData(citys);
    addRessSelection.setCountyData(districts);
}

@Override
protected void initChildFragView0() {
    addRessSelection = view.findViewById(R.id.address_diy);
}

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值