package com.example.sy7_3;
import java.util.ArrayList;
import java.util.
List;
import android.app.ActionBar.LayoutParams;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private PopupWindow popWindow;
private List<good> goodList;
private SQLiteDatabase database;
private DBHelper dbHelper;
private MyAdapter myAdapter;
ListView lv;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView lv = (ListView) findViewById(R.id.goodList);
goodList = new ArrayList<good>();
dbHelper = new DBHelper(this);
database = dbHelper.getWritableDatabase();
Query(null);
myAdapter = new MyAdapter(this);
lv.setAdapter(myAdapter);
this.registerForContextMenu(lv);
class ViewHolder {
private TextView txt_id;
private TextView txt_name;
private TextView txt_price;
public void Insert(String name, String price) {
ContentValues values = new ContentValues();
values.put("GOODS_NAME", name);
values.put("GOODS_PRICE", price);
database.insert("goods", null, values);
public void delete(int index) {
String ID = goodList.get(index).get_id();
database.delete("goods", "_ID =" + Integer.parseInt(ID), null);
Query(null);
myAdapter.notifyDataSetChanged();
DisplayToast("删除成功");
public void Query(String DESC_NAME) {
goodList.clear();
String _id, name, price;
good g;
String str[] = { "%" + DESC_NAME + "%" };
Cursor cursor = null;
if (DESC_NAME == null) {
cursor = database.query("goods", null, null, null, null, null, null);
} else {
cursor = database.query("goods", null, "GOODS_NAME" + " LIKE ? ", str, null, null, null);
while (cursor.moveToNext()) {
_id = cursor.getString(0);
name = cursor.getString(1);
price = cursor.getString(2);
g = new good(_id, name, price);
goodList.add(g);
class MyAdapter extends BaseAdapter {
private Context context;
private LayoutInflater inflater;
public MyAdapter(
Context context) {
this.context = context;
inflater = LayoutInflater.from(context);
@Override
public int getCount() {
return goodList.size();
@Override
public Object getItem(int position) {
return context;
@Override
public long getItemId(int position) {
return 0;
@Override
public View getView(int position, View convertView, ViewGroup parent) {
good p = goodList.get(position);
ViewHolder viewHolder = null;
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = inflater.inflate(R.layout.list_item, null);
viewHolder.txt_id = (TextView) convertView.findViewById(R.id.item_id);
viewHolder.txt_name = (TextView) convertView.findViewById(R.id.item_name);
viewHolder.txt_price = (TextView) convertView.findViewById(R.id.item_price);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
viewHolder.txt_id.setText(p.get_id());
viewHolder.txt_name.setText(p.getName());
viewHolder.txt_price.setText(p.getPrice());
return convertView;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
menu.add(Menu.NONE, 1, 1, "增加");
menu.add(Menu.NONE, 2, 2, "查询");
menu.add(Menu.NONE, 3, 3, "全部记录");
return super.onCreateOptionsMenu(menu);
@Override
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) {
menu.add(0, 1, 0, "删除");
menu.add(0, 2, 0, "修改");
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
long id = info.id;
int position = info.position;
switch (item.getItemId()) {
case 1:
delete(position);
break;
case 2:
updatePopup(position);
myAdapter.notifyDataSetChanged();
break;
return true;
public void updatePopup(final int position) {
View contentView = LayoutInflater.from(MainActivity.this).inflate(R.layout.add_search_popup, null);
popWindow = new PopupWindow(contentView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, true);
popWindow.setContentView(contentView);
View rootview = LayoutInflater.from(MainActivity.this).inflate(R.layout.activity_main, null);
popWindow.showAtLocation(rootview, Gravity.CENTER, 0, 0);
final Button concelBtn = (Button) contentView.findViewById(R.id.concel);
final Button confirmBtn = (Button) contentView.findViewById(R.id.confirm);
final EditText priceView = (EditText) contentView.findViewById(R.id.inputPrice)
;
final EditText nameView = (EditText) contentView.findViewById(R.id.inputName);
nameView.setText(goodList.get(position).getName());
priceView.setText(goodList.get(position).getPrice());
confirmBtn.setText("修改");
concelBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
popWindow.dismiss();
});
confirmBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
String id = goodList.get(position).get_id();
final String name = nameView.getText().toString().trim();
final String price = priceView.getText().toString().trim();
ContentValues cv = new ContentValues();
cv.put("GOODS_NAME", name);
cv.put("GOODS_PRICE", price);
database.update("goods", cv, "_ID = " + id, null);
goodList.get(position).setName(name);
goodList.get(position).setPrice(price);
myAdapter.notifyDataSetChanged();
popWindow.dismiss();
});
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 1:
Toast.makeText(MainActivity.this, "增加", Toast.LENGTH_SHORT).show();
initAddSehPopupWindow(1);
break;
case 2:
Toast.makeText(MainActivity.this, "查询", Toast.LENGTH_SHORT).show();
initAddSehPopupWindow(2);
break;
case 3:
Query(null);
myAdapter.notifyDataSetChanged();
return super.onOptionsItemSelected(item);
protected void initAddSehPopupWindow(final int sign) {
View contentView = LayoutInflater.from(MainActivity.this).inflate(R.layout.add_search_popup, null);
popWindow = new PopupWindow(contentView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, true);
popWindow.setContentView(contentView);
final Button concelBtn = (Button) contentView.findViewById(R.id.concel);
final Button confirmBtn = (Button) contentView.findViewById(R.id.confirm);
final EditText priceView = (EditText) contentView.findViewById(R.id.inputPrice);
final EditText nameView = (EditText) contentView.findViewById(R.id.inputName);
if (sign == 2) {
confirmBtn.setText("查询");
priceView.setVisibility(View.GONE);
} else
confirmBtn.setText("增加");
concelBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
DisplayToast("弹窗退出");
popWindow.dismiss();
});
confirmBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
String name = "";
String price = "";
if (sign == 2) {
if (nameView == null)
DisplayToast("未输入商品名");
else {
name = nameView.getText().toString().trim();
popWindow.dismiss();
Query(name);
myAdapter.notifyDataSetChanged();
if (sign == 1) {
if(nameView.getText().toString() == "" || priceView.getText().toString() == "")
DisplayToast("未输入商品名或售价");
else {
name = nameView.getText().toString().trim();
price = priceView.getText().toString().trim();
Insert(name, price);
Query(null);
myAdapter.notifyDataSetChanged();
popWindow.dismiss();
});
View rootview = LayoutInflater.from(MainActivity.this).inflate(R.layout.activity_main, null);
popWindow.showAtLocation(rootview, Gravity.CENTER, 0, 0);
public void DisplayToast(String str) {
Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
本程序在 android 5.0.1 基础上开发的,对于android低版本很可能不适用。要求最小版本为 android4.2,对应API为 API17代码在 Eclipse 这款IDE上开发的,android studio平台也可以使用本程序保证真实有效!res/layout 下的布局文件1,activity_main.xml 窗体布局文件<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android".
ListView与Sqlite数据库绑定步骤:
1.将Sqlite数据库的内容查询出来并放入数组列表中,形成ListView的数据源;
2.适配器绑定数据源,显示在ListView item中。
本文实现的ListView与Sqlite数据绑定的功能如下图-1
此文主要是介绍怎么使用android自带的数据库SQLite,以及把后台的数据用ListView控件显示
二、新建一个android工程——DBSQLiteOperate
工程目录:
三、清单列表AndroidManifest.xm...
apk文件下载地址:链接:https://share.weiyun.com/5p7tGNJ
全包下载地址:链接:https://share.weiyun.com/5eUc1pA
各页面主要运用
闪屏页...
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<...
1.数据库
public class DBopenHelper extends SQLiteOpenHelper {
private static final String DATA_NAME = "date.db";
private static final int VERSION = 1;
public DBopenHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:lay