前言:因为找了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