实现省市区的联动有两步:
0:第一步解析XML文件得到省的列表,当然了之前还需要创建省,市,区的实体类
使用Pull解析的时候,在START_TAG里面进行初始化,在END_TAG里面进行添加和重新赋值为null,
还有要注意的是最底层的节点<d> 在END_TAG里面是获取不到的,需要在START_TAG里面来进行添加和重新复制为null
1:第二步添加3个Spinner,代表省,市,区,然后实现通过省的选择控制市的显示,然后通过市的选择控制区的显示。就是给省,市添加setOnItemSelectedListener的监听方法,然后在回调中更新spinner 的数据,然后更新显示。
xml文件在代码里面的res-〉raw 文件夹里面
主体的代码:
package tech.androidstudio.provincecitydistrictdemo; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Spinner; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserFactory; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Properties; import tech.androidstudio.provincecitydistrictdemo.entity.City; import tech.androidstudio.provincecitydistrictdemo.entity.District; import tech.androidstudio.provincecitydistrictdemo.entity.Province; public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener { Spinner province_spinner; Spinner city_spinner; Spinner district_spinner; ArrayList<String> province_list; ArrayList<String> city_list; ArrayList<String> district_list; private ArrayList<Province> mProvinceList; private ArrayAdapter<String> province_adapter; private ArrayAdapter<String> city_adapter; private ArrayAdapter<String> district_adapter; //下面的两个参数用来标记选择的是哪一个省和城市,其实可以不用cityNumber的 private int provinceNumber; // private int cityNumber; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); try { mProvinceList = getList(); Log.d("Kodulf", "list " + mProvinceLis