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="@drawable/submenu_right_default" />
    </LinearLayout>

</LinearLayout>

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

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

时间: 2024-07-30 20:16:59

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

QT 创建本地数据库(SQLite数据库)存储数据

注意:QT自带SQLITE数据库,不需要再安装 1.创建一个包含创建.查询.修改和删除数据库的数据库类(DataBase) DataBase.h头文件 #pragma once #include <QObject> #include <QtSql/QSqlDatabase> #include <QtSql/QSqlQuery> #include <QtSql/QSqlDriver> #include <QtSql/QSqlError> #incl

android 本地数据库sqlite的封装

单机android   sqlite数据库的实现,这个数据库可与程序一起生成在安装包中 一.下载sqlite3.exe文件 二.运行 cmd 转到sqlite3.exe 所在目录  运行 sqlite3.exe 数据库名.db     然后会出现sqlite>的命令提示符 输入创建表的语句, create table 表名('列','列'...):(注意: 要在结束部分加  分号 )     此时会在sqlite3.exe 所在目录,出现所建数据库的文件 三.如果想在Android中运行的话,需

Xamarin.Forms&lt;五&gt; Android的本地数据库SQLite

1.准备工作:在项目的“管理NuGet程序包”中安装“SQLite.Net PCL”和“SQLite.Net PCL - XamarinAndroid Platform”在引用中“添加引用”添加SQLite.Net.dll以及SQLite.Net.Platform.XamarinAndroid.dll. 2.在Common项目的Tables文件夹下创建映射类(SQLite表),这个类的结构完全是对应到SQLite数据库中的表.创建一个名为t_Custom表 1 public class t_Cu

轻量级本地数据库SQLite在WinRT的使用

开发环境:Windows 8.1 开发工具:Visual Studio Express 2013 for Windows SQLite数据库介绍 1.SQLite是一款轻型的嵌入式数据库,使用C++开发,使用非常广泛 2.SQLite是一款跨平台的数据库,支持Windows.Linux.Android.IOS.Windows Phone系统 3.在Windows Phone中的SQLite是一个非托管组件 4.可以在Windows运行时中使用,也可以在C#项目中使用 5.在C#项目中需要通过Wi

开源中国 OsChina Android 客户端源码分析(8)数据库Sqlite

1开源中国客户端使用的数据库部分的源码在net.oschina.app.db包下,两个类一个是用于管理数据库的创建类DatabaseHelper,继承SQLiteOpenHelper,另一个是用于数据库的增删改查的工具类NoteDatabase.那么数据库在开源中国源码中哪一模块用到了呢? 便签管理,便签是什么?就是一个记事本的功能o(^▽^)o 2关于SQLiteOpenHelper的使用,自己之前的项目中没有用到过,看了下,这里有个体会:当获取到SQLiteOpenHelper实例,并使用g

unity中使用本地数据库sqlite

sqlite的安全性没用mySql高,因为sqlite不用创建用户,以及权限设置,sqlite是单机数据库,功能简约,小型化,MySql试用于服务器数据量大功能多需要安装,例如网站访问量比较大的数据管理 其实MySQL与Sqlite中的数据库操作函数基本上都一样,没什么区别,主要区别就是权限和库大小 注意:在使用这个sqlite数据管理时,也要把,几个需要的动态库放到Plugins里面(Mono.Data.Sqlite,   sqlite3,   System.Data)这几个动态库百度都能搜到

Unity连接本地数据库sqlite

首先要创建一个sqlite的数据库,记住文件地址,拷贝到Assets目录下,创建的数据库文件后缀为.sqlite.具体创建方法百度sqlite 然后百度Mono.Data.Sqlite,这是一个dll文件,下载下来,同样需要放到Assets目录下 接下来创建c#脚本,using UnityEngine;using System.Collections;using Mono.Data.Sqlite;using System.IO; public class SQLiteDemo : MonoBeh

(转)HTML5 本地数据库(SQLite) 示例

  HTML5 本地数据库(SQLite) 示例 2012-05-07 16:21:13 标签:SQLite HTML5本地数据库 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://supercharles888.blog.51cto.com/609344/856071 按照国内一HTML5先行者的例子仿写了一个用HTML5 API来操作本地SQLite数据库的例子,感觉这个功能蛮好玩的,但是还不够强大,尤其浏览器支持力度不够:

Android实现下拉导航选择菜单效果【转载地址:http://www.cnblogs.com/hanyonglu/archive/2012/07/31/2617488.html】

本文介绍在Android中如何实现下拉导航选择菜单效果.   关于下拉导航选择菜单效果在新闻客户端中用的比较多,当然也可以用在其他的项目中,这样可以很方便的选择更多的菜单.我们可以让我们的应用顶部有左右滑动或进行切换的导航菜单,也可以为了增强用户体验在应用中添加这样的下拉导航选择菜单效果. 关于它的实现原理,其实也是挺简单的,就是使用PopupWindow来进行展现,在显示时控制其高度并配置以相应的动画效果.在PopupWindow中我使用GridView来控制里面的菜单项,每个菜单项对应相应的