当前位置:首页>编程日记>正文

Android学习--------实现增删改查数据库操作以及实现相似微信好友对话管理操作...

近期的一个实验用到东西挺多,特地总结一下。

要求功能:

       1、第一个页面加入歌曲名和歌手,跳到第二个页面列表显示全部记录。使用sqlite数据库

       2、对于第二个页面显示的信息能够进行删除和改动操作,并自己主动刷新

最后我做的效果:

 

长按列表项弹出单个管理的菜单,像微信好友对话管理一样。

删除时能够直接删除这一条并在列表中直接显示。更新时弹出对话框更新内容提交后在列表中又一次显示。

 

做此例遇到的困难:

1、菜单获取上下文

2、获取对话框中的内容

3、对话框button加入监听事件-----注意包不要导错:import android.content.DialogInterface.OnClickListener;

主要代码例如以下:

第一个页面:

package com.example.musiclist;import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;public class MainActivity extends Activity {SQLiteDatabase db;String music;String singer;Button add;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);db = SQLiteDatabase.openOrCreateDatabase(this.getFilesDir().toString()+"/music.db3", null);add = (Button)findViewById(R.id.add);add.setOnClickListener(new OnClickListener(){Cursor cursor = null;public void onClick(View sourse){music = ((EditText)findViewById(R.id.music)).getText().toString();singer = ((EditText)findViewById(R.id.singer)).getText().toString();try{insertData(db,music,singer);}catch(SQLiteException se){//primary key autoincrementdb.execSQL("create table musiclist(_id integer primary key autoincrement," +"music varchar(30) ,"+"singer varchar(30))");insertData(db,music,singer);}finally{//cursor.close();Intent intentSec = new Intent(MainActivity.this,SecondActivity.class);startActivity(intentSec);}}});}private void insertData(SQLiteDatabase db,String name,String weibo){//运行插入语句db.execSQL("insert into musiclist values(null,?,?

)",new String[]{music,singer}); } public void onDestroy(){ super.onDestroy(); if(db!=null&&db.isOpen()){ db.close(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><ListViewandroid:id="@+id/show"android:layout_width="fill_parent"android:layout_height="wrap_content" ></ListView></LinearLayout>


第二个页面:

package com.example.musiclist;import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.os.Bundle;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnCreateContextMenuListener;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.CursorAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TableLayout;public class SecondActivity extends Activity {SQLiteDatabase db;ListView show;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);show = (ListView)findViewById(R.id.show);db = SQLiteDatabase.openOrCreateDatabase(this.getFilesDir().toString()+"/music.db3", null);//显示列表showlist();// 加入长按点击弹出选择菜单show.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {menu.setHeaderTitle("选择操作");menu.add(0, 0, 0, "更新该条");menu.add(0, 1, 0, "删除该条");}});}//给菜单项加入事件@Overridepublic boolean onContextItemSelected(MenuItem item) {AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();//info.id得到listview中选择的条目绑定的idString id = String.valueOf(info.id);switch (item.getItemId()) {case 0:updateDialog(id);return true;case 1://System.out.println("删除"+info.id);deleteData(db,id);showlist();return true;default:return super.onContextItemSelected(item);}}//更新对话框private void updateDialog(final String id){final TableLayout updatemsg = (TableLayout)getLayoutInflater().inflate(R.layout.updatemsg, null);new AlertDialog.Builder(this).setTitle("更新该条信息").setView(updatemsg).setPositiveButton("更新",new OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubString musicN = ((EditText)updatemsg.findViewById(R.id.musicN)).getText().toString();String singerN = ((EditText)updatemsg.findViewById(R.id.singerN)).getText().toString();updateData(db,id,musicN,singerN);showlist();}}).setNegativeButton("取消", new OnClickListener(){public void onClick(DialogInterface dialog,int which){}}).create().show();}private void updateData(SQLiteDatabase db,String id,String musicN,String singerN){db.execSQL("update musiclist set music='"+musicN+"',singer='"+singerN+"' where _id=?",new String[]{id});}//删除列表项private void deleteData(SQLiteDatabase db,String id){db.execSQL("delete from musiclist where _id=?",new String[]{id});}//显示列表项private void showlist(){Cursor cursor = null;try{cursor = db.rawQuery("select * from musiclist", null);inflateList(cursor);}catch(SQLiteException se){db.execSQL("create table musiclist(_id integer primary key autoincrement," +"music varchar(30) ,"+"singer varchar(30))");//查询cursor = db.rawQuery("select * from musiclist", null);inflateList(cursor);}finally{//cursor.close();}}private void inflateList(Cursor cursor){//填充SimpleCursorAdapterSimpleCursorAdapter adapter = new SimpleCursorAdapter(SecondActivity.this,R.layout.line,cursor,new String[]{"_id","music","singer"},new int[]{R.id.idS,R.id.musicS,R.id.singerS},CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);show.setAdapter(adapter);}public void onDestroy(){super.onDestroy();if(db!=null&&db.isOpen()){db.close();}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}
}

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><ListViewandroid:id="@+id/show"android:layout_width="fill_parent"android:layout_height="wrap_content" ></ListView></LinearLayout>

 

列表 line.xml:

<?

xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <TextView android:id="@+id/idS" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" " /> <TextView android:id="@+id/musicS" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" " /> <TextView android:id="@+id/singerS" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" " /> </LinearLayout>


对话框:updatemsg.xml

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" ><TableRow><TextViewandroid:layout_width="100dip"android:layout_height="wrap_content"android:text="音乐名"android:textSize="30px"android:textColor="#ffffff" /><EditTextandroid:id="@+id/musicN"android:layout_width="100dip"android:layout_height="wrap_content" /></TableRow><TableRow><TextViewandroid:layout_width="100dip"android:layout_height="wrap_content"android:text="歌手"android:textSize="30px"android:textColor="#ffffff" /><EditTextandroid:id="@+id/singerN"android:layout_width="100dip"android:layout_height="wrap_content" /></TableRow>
</TableLayout>



 


http://www.coolblog.cn/news/952d0503d7f17bf8.html

相关文章:

  • asp多表查询并显示_SpringBoot系列(五):SpringBoot整合Mybatis实现多表关联查询
  • s7day2学习记录
  • 【求锤得锤的故事】Redis锁从面试连环炮聊到神仙打架。
  • 矿Spring入门Demo
  • 拼音怎么写_老师:不会写的字用圈代替,看到孩子试卷,网友:人才
  • Linux 实时流量监测(iptraf中文图解)
  • Win10 + Python + GPU版MXNet + VS2015 + RTools + R配置
  • 美颜
  • shell访问php文件夹,Shell获取某目录下所有文件夹的名称
  • 如何优雅的实现 Spring Boot 接口参数加密解密?
  • LeCun亲授的深度学习入门课:从飞行器的发明到卷积神经网络
  • Mac原生Terminal快速登录ssh
  • java受保护的数据与_Javascript类定义语法,私有成员、受保护成员、静态成员等介绍...
  • mysql commit 机制_1024MySQL事物提交机制
  • 支撑微博千亿调用的轻量级RPC框架:Motan
  • jquery 使用小技巧
  • 2019-9
  • 法拉利虚拟学院2010 服务器,法拉利虚拟学院2010
  • vscode pylint 错误_将实际未错误的py库添加到pylint白名单
  • 科学计算工具NumPy(3):ndarray的元素处理
  • 工程师在工作电脑存 64G 不雅文件,被公司开除后索赔 41 万,结果…
  • linux批量创建用户和密码
  • newinsets用法java_Java XYPlot.setInsets方法代碼示例
  • js常用阻止冒泡事件
  • 气泡图在开源监控工具中的应用效果
  • 各类型土地利用图例_划重点!国土空间总体规划——土地利用
  • php 启动服务器监听
  • dubbo简单示例
  • 【设计模式】 模式PK:策略模式VS状态模式
  • [iptables]Redhat 7.2下使用iptables实现NAT
  • Ubuntu13.10:[3]如何开启SSH SERVER服务
  • CSS小技巧——CSS滚动条美化
  • JS实现-页面数据无限加载
  • 阿里巴巴分布式服务框架 Dubbo
  • 最新DOS大全
  • Django View(视图系统)
  • 阿里大鱼.net core 发送短信
  • 程序员入错行怎么办?
  • 两张超级大表join优化
  • 第九天函数
  • Linux软件安装-----apache安装
  • HDU 5988 最小费用流
  • Sorenson Capital:值得投资的 5 种 AI 技术
  • 《看透springmvc源码分析与实践》读书笔记一
  • 正式开课!如何学习相机模型与标定?(单目+双目+鱼眼+深度相机)
  • Arm芯片的新革命在缓缓上演
  • nagios自写插件—check_file
  • python3 错误 Max retries exceeded with url 解决方法
  • 行为模式之Template Method模式
  • 通过Spark进行ALS离线和Stream实时推荐