android地區三級聯動選擇
阿新 • • 發佈:2018-12-29
地區三級聯動選擇 一個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;
}
}
}
}