图-1 android 实现对listview数据的增删改查主要界面本例只有一个UpdateListViewActivity类,相关的操作以及功能均在一个界面完成。
对listview 数据的增删改查,实质就是对填充的数组(填充的数据)进行重新修改后,再次调用notifyDataSetChanged()方法进行更新。
尽管如此,对数据使用起来还是比较生疏,下面的例子能加强对listview数据更新的理解。
UpdateListViewActivity.java类是程序的唯一的一个类,实现了对listview增删改查的操作,代码比较多,但理解并不比较复杂。
1.UpdateListViewActivity.java1.package com.updatelistview.main;2.3.import java.util.ArrayList;4.import java.util.HashMap;5.6.import android.app.Activity;7.import android.app.AlertDialog;8.import android.content.Context;9.import android.content.DialogInterface;10.import android.os.Bundle;11.import youtInflater;12.import android.view.View;13.import android.view.View.OnClickListener;14.import android.widget.Button;15.import android.widget.EditText;16.import android.widget.LinearLayout;17.import android.widget.ListView;18.import android.widget.SimpleAdapter;19.import android.widget.Toast;20.21.public class UpdateListViewActivity extends Activity {22.// 控件23.private Button addBtn;24.private Button deleteBtn;25.private Button editBtn;26.private Button queryBtn;27.private ListView listview;28.// 数组29.private SimpleAdapter listItemAdapter;30.private ArrayList<HASHMAP<STRING, Object>> listItem = null;31.32./** Called when the activity is first created. */33.@Override34.public void onCreate(Bundle savedInstanceState) {35.super.onCreate(savedInstanceState);36. setContentView(yout.main);37.38.// 获取控件39. addBtn = (Button) findViewById(R.id.add_id);40. deleteBtn = (Button) findViewById(R.id.delete_id);41. editBtn = (Button) findViewById(R.id.edit_id);42. queryBtn = (Button) findViewById(R.id.query_id);43. listview = (ListView) findViewById(R.id.show_result);44.45.// 初始化数据46. init();47.48.// 设置控件事件监听49. addBtn.setOnClickListener(addClick);50. deleteBtn.setOnClickListener(deleteClick);51. editBtn.setOnClickListener(editClick);52. queryBtn.setOnClickListener(queryClick);53.54. }55.56.// 添加事件响应57. OnClickListener addClick = new OnClickListener() {58.59.@Override60.public void onClick(View v) {61.// TODO Auto-generated method stub62.63.// 加载输入框的布局文件64. LayoutInflater inflater = (LayoutInflater) UpdateListViewActivity.this65. .getSystemService(YOUT_INFLATER_SERVICE);66.final LinearLayout layout = (LinearLayout) inflater.inflate(67. yout.input_add, null);68.69.// 弹出的对话框70.71.new AlertDialog.Builder(UpdateListViewActivity.this)72./* 弹出窗口的最上头文字 */73. .setTitle("添加一条数据")74./* 设置弹出窗口的图式 */75. .setIcon(android.R.drawable.ic_dialog_info)76./* 设置弹出窗口的信息 */77. .setMessage("请输入添加的内容")78. .setView(layout)79. .setPositiveButton("确定",80.new DialogInterface.OnClickListener() {81.public void onClick(82. DialogInterface dialoginterface, int i) {83.84. EditText inputStringr = (EditText) layout85. .findViewById(R.id.input_add_string);86.87. String str = inputStringr.getText()88. .toString();89.90.if (str == null || str.equals("")) {91.92. Toast.makeText(getApplicationContext(),93."添加的内容不能为空", Toast.LENGTH_SHORT)94. .show();95. } else {96. HashMap<STRING, Object> map = new HashMap<STRING, Object>();97. map.put("viewspot", str);98. map.put("add", R.drawable.right);99. listItem.add(0, map);100.// 如果在前面添加一条数据添加101.// listItem.add(map);102. listItemAdapter.notifyDataSetChanged();103. Toast.makeText(104. UpdateListViewActivity.this,105."添加的一条数据为:" + str + "",106. Toast.LENGTH_SHORT).show();107.108. }109.110. }111. })112. .setNegativeButton("取消",113.new DialogInterface.OnClickListener() { /* 设置跳出窗口的返回事件 */114.public void onClick(115. DialogInterface dialoginterface, int i) {116. Toast.makeText(UpdateListViewActivity.this, 117."取消了删除数据", Toast.LENGTH_SHORT) 118. .show();119.120. }121. }).show();122.123. }124. };125.126.// 删除事件响应127. OnClickListener deleteClick = new OnClickListener() {128.129.@Override130.public void onClick(View v) {131.// TODO Auto-generated method stub132.133./**134. * listItem.clear();清空所有数据135. *136. * */137.138./*139. * listItem.clear();140. * listItemAdapter.notifyDataSetChanged();141. */142.143.// 加载输入框的布局文件144. LayoutInflater inflater = (LayoutInflater) UpdateListViewActivity.this 145. .getSystemService(YOUT_INFLATER_SERVICE); 146.final LinearLayout layout = (LinearLayout) inflater.inflate(147. yout.input_delete, null);148.149.// 弹出的对话框150.151.new AlertDialog.Builder(UpdateListViewActivity.this)152./* 弹出窗口的最上头文字 */153. .setTitle("删除一条数据")154./* 设置弹出窗口的图式 */155. .setIcon(android.R.drawable.ic_dialog_info)156./* 设置弹出窗口的信息 */157. .setMessage("请输入删除的索引")158. .setView(layout)159. .setPositiveButton("确定",160.new DialogInterface.OnClickListener() {161.public void onClick(162. DialogInterface dialoginterface, int i) {163.164. EditText inputNumber = (EditText) layout165. .findViewById(R.id.input_delete_number); 166.167. String str = inputNumber.getText()168. .toString();169.170.if (str == null || str.equals("")) {171.172. Toast.makeText(getApplicationContext(), 173."请输入一个数字", Toast.LENGTH_SHORT) 174. .show();175. } else {176.int number = Integer.valueOf(str);177.178.int size = listItem.size();179.180.// 判断数字是否超出数组索引范围181.if (number >= size) {182. Toast.makeText(183. getApplicationContext(),184."没有找到删除的数据索引",185. Toast.LENGTH_SHORT).show();186.187. } else {188.189. String value = listItem.get(number)190. .toString();191. listItem.remove(number);192. listItemAdapter193. .notifyDataSetChanged();194. Toast.makeText(195. UpdateListViewActivity.this,196."删除的数据为:" + value + "",197. Toast.LENGTH_SHORT).show();198.199. }200. }201.202. }203. })204. .setNegativeButton("取消",205.new DialogInterface.OnClickListener() { /* 设置跳出窗口的返回事件 */206.public void onClick(207. DialogInterface dialoginterface, int i) {208. Toast.makeText(UpdateListViewActivity.this, 209."取消了删除数据", Toast.LENGTH_SHORT) 210. .show();211.212. }213. }).show();214.215. }216. };217.// 修改事件响应218. OnClickListener editClick = new OnClickListener() {219.220.@Override221.public void onClick(View v) {222.// TODO Auto-generated method stub223.// 加载输入框的布局文件224. LayoutInflater inflater = (LayoutInflater) UpdateListViewActivity.this 225. .getSystemService(YOUT_INFLATER_SERVICE); 226.final LinearLayout layout = (LinearLayout) inflater.inflate(227. yout.input_edit, null);228.229.// 弹出的对话框230.231.new AlertDialog.Builder(UpdateListViewActivity.this)232./* 弹出窗口的最上头文字 */233. .setTitle("修改一条数据")234./* 设置弹出窗口的图式 */235. .setIcon(android.R.drawable.ic_dialog_info)236./* 设置弹出窗口的信息 */237. .setMessage("请输入修改的索引及内容")238. .setView(layout)239. .setPositiveButton("确定",240.new DialogInterface.OnClickListener() {241.public void onClick(242. DialogInterface dialoginterface, int i) {243.244. EditText inputEditNumber = (EditText) layout 245. .findViewById(R.id.input_edit_number); 246.247. String numberStr = inputEditNumber248. .getText().toString();249.250. EditText inputEditString = (EditText) layout 251. .findViewById(R.id.input_edit_string); 252.253. String editStr = inputEditString.getText()254. .toString();255.256.if (numberStr == null257. || numberStr.equals("")) {258.259. Toast.makeText(getApplicationContext(), 260."请输入要修改的索引", Toast.LENGTH_SHORT)261. .show();262. } else {263.int number = Integer.valueOf(numberStr); 264.265.int size = listItem.size();266.267.// 判断数字是否超出数组索引范围268.if (number >= size) {269. Toast.makeText(270. getApplicationContext(),271."没有找到修改的数据索引",272. Toast.LENGTH_SHORT).show();273.274. } else {275.276. HashMap<STRING, Object> map = new HashM ap<STRING, Object>();277. map.put("viewspot", editStr);278. map.put("add", R.drawable.right);279.280. listItem.set(number, map);281. listItemAdapter282. .notifyDataSetChanged();283.284. Toast.makeText(285. UpdateListViewActivity.this,286."数据修改为:" + editStr + "",287. Toast.LENGTH_SHORT).show();288.289. }290. }291.292. }293. })294. .setNegativeButton("取消",295.new DialogInterface.OnClickListener() { /* 设置跳出窗口的返回事件 */296.public void onClick(297. DialogInterface dialoginterface, int i) {298. Toast.makeText(UpdateListViewActivity.this, 299."取消了修改数据", Toast.LENGTH_SHORT) 300. .show();301.302. }303. }).show();304.305. }306. };307.308.// 查询事件响应309. OnClickListener queryClick = new OnClickListener() {310.311.@Override312.public void onClick(View v) {313.// TODO Auto-generated method stub314.// 查询数据315. listItemAdapter.notifyDataSetChanged();316. }317. };318.319.// 初始化数据320.private void init() {321.322. listItem = new ArrayList<HASHMAP<STRING, Object>>();323.for (int i = 0; i < 12; i++) {324. HashMap<STRING, Object> map = new HashMap<STRING, Object>() ;325. map.put("viewspot", "北京故宫,颐和园" + i);326. map.put("add", R.drawable.right);327. listItem.add(map);328. }329. listItemAdapter = new SimpleAdapter(getApplicationContext(), listItem,// 数据源330. yout.items, new String[] { "viewspot", "add" }, new int[] { 331. R.id.viewspot, R.id.add });332. listview.setAdapter(listItemAdapter);333.334. } 335. 336.}。