android地区三级联动选择

来源:互联网 发布:java分页怎么实现 编辑:程序博客网 时间:2024/05/02 04:16
地区三级联动选择一个Activity 2个Fragment, 在Activity中一次添加Fragment显示省级、市级、县级的列表。
Activity 根布局为FrameLayout,其中显示一个省级的RecyclerView的列表,在第一个省级列表RecyclerView的adapter中的点击加入市级的第一个Fragment在市级的第一个Fragment的RecylerView的adapter中点击加入县级第二个Fragment,县级第二个Fragment的RecyclerView显示县级数据,选择结果记录,AreaBean对象从第一个activity的省级adapter传到第一个fragment在到adapter市级,
再入第二个Fraggment的adapter 点击保存返回数据,然后结束当前的Fragment和Activity。
第一个省级activity:
public class SelectProvince extends AppCompatActivity {    @BindView(R.id.province_list)    RecyclerView province_select;    private RecyclerView.LayoutManager manager;    private Province_adapter adapter;    private CityBean cityBean;    //用handler获取子线程的数据    private Handler handler = new Handler(){        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            cityBean = (CityBean) msg.obj;            //获得数据            adapter = new Province_adapter(SelectProvince.this,cityBean.getData());            adapter.setAreaBean(new AreaBean());            province_select.setAdapter(adapter);        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_select_area);        ButterKnife.bind(this);        manager = new LinearLayoutManager(this);        province_select.setLayoutManager(manager);        province_select.setHasFixedSize(true);        GetJsonToObject();    }    /*     *解析JSon     */    private void GetJsonToObject(){        new Thread(new Runnable() {            @Override            public void run() {                System.out.println("sadafas");                Gson gson = new Gson();                //传出数据                Message message = Message.obtain();                message.obj = gson.fromJson(getJson("ChinaCites.json"),CityBean.class);                handler.sendMessage(message);            }        }).start();    }    /*     *获得Json     */    public String getJson(String fileName) {        StringBuilder stringBuilder = new StringBuilder();        try {            AssetManager assetManager = this.getAssets();            BufferedReader bf = new BufferedReader(new InputStreamReader(                    assetManager.open(fileName)));            String line;            while ((line = bf.readLine()) != null) {                stringBuilder.append(line);            }        } catch (IOException e) {            e.printStackTrace();        }        return stringBuilder.toString();    }    
 /*     *返回和销毁fragment     */    private void BackFragment(){        if (getSupportFragmentManager().getBackStackEntryCount() == 0){
            //必须先setResult            setResult(0x123,null);            finish();        }else {            getSupportFragmentManager().popBackStack();        }    }

}

布局:
<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_select_area"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context=".SelectProvince">    <android.support.v7.widget.RecyclerView        android:id="@+id/province_list"        android:layout_width="match_parent"        android:layout_height="match_parent">    </android.support.v7.widget.RecyclerView></FrameLayout>

市级Fragment:
public class SelectCity extends Fragment {    @BindView(R.id.city_list)    RecyclerView city_select;    private RecyclerView.LayoutManager manager;    private City_adapter adapter;    List<CityBean.Data.City> list;    private AppCompatActivity compatActivity;    private AreaBean areaBean;    public void setAreaBean(AreaBean areaBean) {        this.areaBean = areaBean;    }    public AreaBean getAreaBean() {        return areaBean;    }    public SelectCity(AppCompatActivity activity, List<CityBean.Data.City> list) {             this.list = list;        this.compatActivity = activity;    }    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,                             Bundle savedInstanceState) {        View rootview = inflater.inflate(R.layout.fragment_select_city, container, false);        ButterKnife.bind(this,rootview);        manager = new LinearLayoutManager(rootview.getContext());        city_select.setLayoutManager(manager);        city_select.setHasFixedSize(true);        adapter = new City_adapter(compatActivity,list);        //传递选择的省份        adapter.setAreaBean(getAreaBean());        city_select.setAdapter(adapter);        return rootview;    }    @Override    public void onDestroy() {        super.onDestroy();        //System.out.println("city");    }}

布局:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="@color/SystemWhite">    <android.support.v7.widget.RecyclerView        android:id="@+id/city_list"        android:layout_width="match_parent"        android:layout_height="match_parent">    </android.support.v7.widget.RecyclerView></FrameLayout>


县级Fragment:

public class SelectCounty extends Fragment {    @BindView(R.id.county_list)    RecyclerView county_select;    private RecyclerView.LayoutManager manager;    private County_adapter adapter;    private List<String> county;    private AreaBean areaBean;    public void setAreaBean(AreaBean areaBean) {        this.areaBean = areaBean;    }    public AreaBean getAreaBean() {        return areaBean;    }    private AppCompatActivity compatActivity;    public SelectCounty(AppCompatActivity activity,List<String> county) {        this.county = county;        this.compatActivity = activity;    }    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,                             Bundle savedInstanceState) {        View rootview = inflater.inflate(R.layout.fragment_select_county, container, false);        ButterKnife.bind(this,rootview);        manager = new LinearLayoutManager(rootview.getContext());        county_select.setLayoutManager(manager);        county_select.setHasFixedSize(true);        adapter = new County_adapter(compatActivity,county);        adapter.setAreaBean(getAreaBean());        county_select.setAdapter(adapter);        return rootview;    }    @Override    public void onDestroy() {        super.onDestroy();        //System.out.println("conuty");    }}

布局:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="@color/SystemWhite">    <android.support.v7.widget.RecyclerView        android:id="@+id/county_list"        android:layout_width="match_parent"        android:layout_height="match_parent">    </android.support.v7.widget.RecyclerView></FrameLayout>


省级adapter:

public class Province_adapter extends RecyclerView.Adapter<Province_adapter.MyHolder> {    private List<CityBean.Data> list;    private AppCompatActivity compatActivity;    private AreaBean areaBean;    public void setAreaBean(AreaBean areaBean) {        this.areaBean = areaBean;    }    public AreaBean getAreaBean() {        return areaBean;    }    public Province_adapter(AppCompatActivity compatActivity, List<CityBean.Data> list){        this.list = list;        this.compatActivity = compatActivity;    }    @Override    public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View rootview = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_area,null);        MyHolder holder = new MyHolder(rootview);        return holder;    }    @Override    public void onBindViewHolder(MyHolder holder, final int position) {        holder.area_text.setText(list.get(position).getName());        holder.area_text.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //跳到城市                getAreaBean().setmProvince(list.get(position).getName());                addFrament(compatActivity,list.get(position).getCity());            }        });    }    @Override    public int getItemCount() {        return list.size();    }    public static class MyHolder extends RecyclerView.ViewHolder{        @BindView(R.id.area_text)        TextView area_text;        public MyHolder(View itemView) {            super(itemView);            ButterKnife.bind(this,itemView);        }    }    private void addFrament(AppCompatActivity activity, List<CityBean.Data.City> list){        SelectCity selectCity = new SelectCity(activity,list);        //传递结果        selectCity.setAreaBean(getAreaBean());        FragmentManager manager = activity.getSupportFragmentManager();        FragmentTransaction transaction = manager.beginTransaction();        transaction.add(R.id.activity_select_area, selectCity,list.toString());        transaction.addToBackStack(list.toString());        transaction.commit();    }}


市级adapter:

public class City_adapter extends RecyclerView.Adapter<City_adapter.MyHolder> {    private List<CityBean.Data.City> list;    private AppCompatActivity compatActivity;    private AreaBean areaBean;    public void setAreaBean(AreaBean areaBean) {        this.areaBean = areaBean;    }    public AreaBean getAreaBean() {        return areaBean;    }    public City_adapter(AppCompatActivity compatActivity, List<CityBean.Data.City> list){               this.list = list;        this.compatActivity = compatActivity;    }    @Override    public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View rootview = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_area,null);        MyHolder holder = new MyHolder(rootview);        return holder;    }    @Override    public void onBindViewHolder(MyHolder holder, final int position) {        holder.area_text.setText(list.get(position).getName());        holder.area_text.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //跳到县区                getAreaBean().setmCity(list.get(position).getName());                addFrament(compatActivity,list.get(position).getCounty());            }        });    }    @Override    public int getItemCount() {        return list.size();    }    public static class MyHolder extends RecyclerView.ViewHolder{        @BindView(R.id.area_text)        TextView area_text;        public MyHolder(View itemView) {            super(itemView);            ButterKnife.bind(this,itemView);        }    }    private void addFrament(AppCompatActivity activity, List<String> county){        SelectCounty selectCounty = new SelectCounty(activity,county);        //传递城市        selectCounty.setAreaBean(getAreaBean());        FragmentManager manager = activity.getSupportFragmentManager();        FragmentTransaction transaction = manager.beginTransaction();        transaction.add(R.id.activity_select_area, selectCounty,list.toString());        transaction.addToBackStack(list.toString());        transaction.commit();    }}

县级dapter:

public class County_adapter extends RecyclerView.Adapter<County_adapter.MyHolder> {    private List<String> county;    private AppCompatActivity compatActivity;    private AreaBean areaBean;    public void setAreaBean(AreaBean areaBean) {        this.areaBean = areaBean;    }    public AreaBean getAreaBean() {        return areaBean;    }    public County_adapter(AppCompatActivity compatActivity,List<String> county){               this.county = county;        this.compatActivity = compatActivity;    }    @Override    public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View rootview = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_area,null);        MyHolder holder = new MyHolder(rootview);        return holder;    }    @Override    public void onBindViewHolder(MyHolder holder, final int position) {        holder.area_text.setText(county.get(position));        holder.area_text.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //获取选择地区的结果                //compatActivity.setResult();                getAreaBean().setmCounty(county.get(position));                //返回结果                Intent intent = new Intent();                intent.putExtra("arearesult",getAreaBean());                compatActivity.setResult(0x123,intent);                //关闭当前activity                compatActivity.finish();            }        });    }    @Override    public int getItemCount() {        return county.size();    }    public static class MyHolder extends RecyclerView.ViewHolder{        @BindView(R.id.area_text)        TextView area_text;        public MyHolder(View itemView) {            super(itemView);            ButterKnife.bind(this,itemView);        }    }}

Areabean:

public class AreaBean implements Serializable{    private String mProvince;    private String mCity;    private String mCounty;    public String getmProvince() {        return mProvince;    }    public void setmProvince(String mProvince) {        this.mProvince = mProvince;    }    public String getmCity() {        return mCity;    }    public void setmCity(String mCity) {        this.mCity = mCity;    }    public String getmCounty() {        return mCounty;    }    public void setmCounty(String mCounty) {        this.mCounty = mCounty;    }}


Citybean:

public class CityBean {    private String note;    private List<Data> data;    public String getNote() {        return note;    }    public void setNote(String note) {        this.note = note;    }    public List<Data> getData() {        return data;    }    public void setData(List<Data> data) {        this.data = data;    }        public static class Data {            private String name;            private List<City> city;            public String getName() {                return name;            }            public void setName(String name) {                this.name = name;            }            public List<City> getCity() {                return city;            }            public void setCity(List<City> city) {                this.city = city;            }                public static class City {                    private String name;                    private List<String> county;                    public String getName() {                        return name;                    }                    public void setName(String name) {                        this.name = name;                    }                    public List<String> getCounty() {                        return county;                    }                    public void setCounty(List<String> county) {                        this.county = county;                    }                }        }}




0 0
原创粉丝点击