首页 > 代码库 > android listview级联三菜单选择地区,本地数据库sqlite级联地区,item选中不变色

android listview级联三菜单选择地区,本地数据库sqlite级联地区,item选中不变色

前言:因为找了N多网上的资源都没有好的解决方案,别人都是只给思路没给具体源码,真TMD纠结,干嘛求别人,自己动手才是真,最痛恨那些所谓大牛的作风,给了点点代码就让别人去想,你让我们这种小白情何于堪!!!!!!此例是基于listview来实现本地sqlite实现的!

二话不说,程序猿求的是有图有真相有源码!大家下载后有什么问题可以找到本人;QQ508181017


核心代码如下

1、数据库操作类

package com.icq.demo.db;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.icq.demo.R;
import com.icq.demo.beans.Item;

public class BaseDBDao {
	private static String dbname="icq_db";
	private static GYMDatabase mdb;
	private static SQLiteDatabase db;
	private static String apppackage="com.icq.demo";
	private static int dbRec=R.raw.icq_db;

    /**
     * 获取省
     * @param context
     * @return
     */
	public static List<Item> getProvinces(Context context){
		mdb = new GYMDatabase(context, dbname, apppackage, dbRec);
		mdb.openDatabase();
		db = mdb.getDatabase();
		List<Item> list = new ArrayList<Item>();
		try {
			String sql = "select * from province";
			Cursor cursor = db.rawQuery(sql, null);
			cursor.moveToFirst();
			for (int i = 0; i < cursor.getCount(); i++) {
				String code = cursor.getString(cursor
						.getColumnIndex("ProvinceID"));
				String name = cursor.getString(cursor
						.getColumnIndex("ProvinceName"));
				Item myListItem = new Item();
				myListItem.setName(name);
				myListItem.setId(code);
				list.add(myListItem);
				cursor.moveToNext();
			}
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
		mdb.closeDatabase();
		db.close();
		
		return list;
	}
	

	/**
	 * 根据省级id获取城市列表
	 * @param pid
	 * @param context
	 * @return
	 */
	public static List<Item> getCitys(String pid,Context context) {
		mdb = new GYMDatabase(context, dbname, apppackage, dbRec);
		mdb.openDatabase();
		db = mdb.getDatabase();
		List<Item> list = new ArrayList<Item>();

		try {
			String sql = "select * from city where ProvinceID='" + pid
					+ "'";
			Cursor cursor = db.rawQuery(sql, null);
			cursor.moveToFirst();
			for (int i = 0; i < cursor.getCount(); i++) {
				String code = cursor.getString(cursor.getColumnIndex("CityID"));
				String name = cursor.getString(cursor.getColumnIndex("CityName"));
				Item myListItem = new Item();
				myListItem.setName(name);
				myListItem.setId(code);
				list.add(myListItem);
				cursor.moveToNext();
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		mdb.closeDatabase();
		db.close();

		return list;
	}
	/**
	 * 根据城市id获取城镇
	 * @param cid
	 * @param context
	 * @return
	 */
	public static List<Item> getCountrys(String cid,Context context) {
		mdb = new GYMDatabase(context, dbname, apppackage, dbRec);
		mdb.openDatabase();
		db = mdb.getDatabase();
		List<Item> list = new ArrayList<Item>();

		try {
			String sql = "select * from district where CityID='" + cid
					+ "'";
			Cursor cursor = db.rawQuery(sql, null);
			cursor.moveToFirst();
			for (int i = 0; i < cursor.getCount(); i++) {
				String code = cursor.getString(cursor.getColumnIndex("DistrictID"));
				String name = cursor.getString(cursor.getColumnIndex("DistrictName"));
				Item myListItem = new Item();
				myListItem.setName(name);
				myListItem.setId(code);
				list.add(myListItem);
				cursor.moveToNext();
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		mdb.closeDatabase();
		db.close();

		return list;
	}
	

}

2、适配器

public class ListAdapter extends BaseAdapter {
	private Context context;
	private List<Item> myList;
	private LayoutInflater mInflater;
	private int selectedPosition = -1;// 选中的位置
	public ListAdapter(Context context, List<Item> myList,int selected) {
		this.context = context;
		this.myList = myList;
		this.mInflater = LayoutInflater.from(this.context);
		selectedPosition=selected;
	}

	public int getCount() {
		return myList.size();
	}

	public Object getItem(int position) {
		return myList.get(position);
	}

	public long getItemId(int position) {
		return position;
	}
	public void setSelectedPosition(int position) {
		selectedPosition = position;
	}

	public View getView(final int position,  View convertView, final ViewGroup parent) {
		
		 ViewHolder holder = null;
		if (convertView == null) {
			holder = new ViewHolder();
			convertView = mInflater.inflate(R.layout.block_list_item, null);

			convertView.setTag(holder);
		} else {
			holder = (ViewHolder) convertView.getTag();
		}
		final View cView=convertView;
		final ViewHolder cHolder=holder;
		holder.iLayout=(LinearLayout) convertView.findViewById(R.id.ll_root);
		holder.name = (TextView) convertView.findViewById(R.id.tv_name);
		holder.img = (ImageView) convertView.findViewById(R.id.iv_right);
		holder.name.setText(myList.get(position).getName());
		System.out.println("Item值为:"+selectedPosition);
		System.out.println("自带的为:"+position);
		if (selectedPosition == position) {
			holder.iLayout.setSelected(true);
			holder.iLayout.setPressed(true);
			holder.iLayout.setBackgroundColor(Color.RED);
		} else {
			holder.iLayout.setSelected(false);
			holder.iLayout.setPressed(false);
			holder.iLayout.setBackgroundColor(Color.TRANSPARENT);   

		}

		return convertView;
	}
	
	class ButtonView {
		int layoutViewId;

		ButtonView(int tId) {
			layoutViewId = tId;
		}
	}
     

	public final class ViewHolder {
		public TextView name;
		public ImageView img;
		public LinearLayout iLayout;
	}

}

3、xml视图

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="45dp"
        android:background="#1E90FF" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginLeft="20dp"
            android:text="多级菜单"
            android:textColor="#ffffff"
            android:textSize="20sp" />
    </RelativeLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:orientation="horizontal"
        android:layout_height="fill_parent" >

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="400dp"
            android:layout_weight="1"
            android:orientation="vertical" >

            <ListView
                android:id="@+id/list_province"
                android:scrollbars="none"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >
            </ListView>
        </LinearLayout>

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="400dp"
            android:layout_weight="1"
            android:orientation="vertical" >

            <ListView
                android:id="@+id/list_city"
                android:scrollbars="none"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >
            </ListView>
        </LinearLayout>

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="400dp"
            android:layout_weight="1"
            android:orientation="vertical" >

            <ListView
                android:id="@+id/list_district"
                android:scrollbars="none"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >
            </ListView>
        </LinearLayout>
    </LinearLayout>

</LinearLayout>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center" >

    <LinearLayout
        android:id="@+id/ll_root"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center" >

        <TextView
            android:id="@+id/tv_name"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:ellipsize="end"
            android:maxEms="18"
            android:paddingBottom="10dp"
            android:paddingLeft="5dp"
            android:paddingTop="10dp"
            android:singleLine="true"
            android:text="list方式展示"
            android:textSize="16sp" />

        <ImageView
            android:id="@+id/iv_right"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src=http://www.mamicode.com/"@drawable/submenu_right_default" />>
4、操作界面

public class ListViewShowActivity extends Activity{
	private Context mContext;
	
	private ListView mLv_province,mLv_city,mLv_district;
	private ListAdapter mProvinceAdapter,mCityAdapter,mDistrictAdapter;
	private List<Item> provinces,cities,districts;
	
	private String pId,cId,dId;
	
	

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_listview);
		mContext=this;
		initView();
		initData();
		initOnItemClick();
		
	}



	private void initOnItemClick() {
		mLv_province.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> adapter, View view, int position,
					long id) {
				mProvinceAdapter.setSelectedPosition(position);
				mProvinceAdapter.notifyDataSetInvalidated(); 
				
				
				Item proItem=(Item) mProvinceAdapter.getItem(position);
				pId=proItem.getId();
				//二级动
				cities=BaseDBDao.getCitys(pId, mContext);
				mCityAdapter=new ListAdapter(mContext, cities,0);
				mCityAdapter.notifyDataSetChanged();
				mLv_city.setAdapter(mCityAdapter);
				
				//三级动
				districts=BaseDBDao.getCountrys(cities.get(0).getId(), mContext);
				mDistrictAdapter=new ListAdapter(mContext, districts,0);
				mDistrictAdapter.notifyDataSetChanged();
				mLv_district.setAdapter(mDistrictAdapter);
				
			}
		});
		mLv_city.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> adapter, View view, int position,
					long id) {
				
				mCityAdapter.setSelectedPosition(position);
				mCityAdapter.notifyDataSetInvalidated(); 
				
				Item proItem=(Item) mCityAdapter.getItem(position);
				cId=proItem.getId();
				
				districts=BaseDBDao.getCountrys(cId, mContext);
				mDistrictAdapter=new ListAdapter(mContext, districts,0);
				mDistrictAdapter.notifyDataSetChanged();
				mLv_district.setAdapter(mDistrictAdapter);
				
				
			}
		});
		
		
		mLv_district.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> adapter, View view, int position,
					long id) {
				mDistrictAdapter.setSelectedPosition(position);
				mDistrictAdapter.notifyDataSetInvalidated(); 
				
				Item proItem=(Item) mDistrictAdapter.getItem(position);
				dId=proItem.getId();
				
			}
		});
		
		
		
	}



	private void initData() {
		provinces=BaseDBDao.getProvinces(mContext);
		mProvinceAdapter=new ListAdapter(mContext, provinces,0);
		mLv_province.setAdapter(mProvinceAdapter);
		
		cities=BaseDBDao.getCitys(provinces.get(0).getId(), mContext);
		mCityAdapter=new ListAdapter(mContext, cities,0);
		mLv_city.setAdapter(mCityAdapter);
		
		districts=BaseDBDao.getCitys(cities.get(0).getId(), mContext);
		mDistrictAdapter=new ListAdapter(mContext, districts,0);
		mLv_district.setAdapter(mDistrictAdapter);
		
	}



	private void initView() {
		mLv_province=(ListView) findViewById(R.id.list_province);
		mLv_city=(ListView) findViewById(R.id.list_city);
		mLv_district=(ListView) findViewById(R.id.list_district);
	}


	


}

因为资源上传太久,估计是留了我个人的联系信息管理员封了,QQ联系我吧,发资源给大家,或者资源审核通过了再上下载资源地址;QQ508181017

已经审核通过,确实是包含联系方式问题才不能上传,后面修改了:http://download.csdn.net/detail/shi508181017/7684909