android listview綜合使用示範範例_結合資料庫操作和listitem單擊長按等事件處理

來源:互聯網
上載者:User

標籤:android   style   blog   http   color   io   os   使用   ar   

本示範範例說明:

1.自己定義listview條目樣式,自己定義listview顯示列數的多少,靈活與資料庫中欄位綁定.

2.實現對DB的增刪改查,而且操作後listview自己主動重新整理.

3.響應使用者操作點擊事件,示範範例中展示單擊時取出主鍵Id和其它內容.

4.響應使用者操作長按事件,示範範例中展示長按時依據主鍵Id來編輯和刪除資料.

5.表現層與資料處理層分開,不依賴於cursor(使用cursor不易表現和業務分離),支援介面編程.

6.使用資料庫處理架構AHibernate靈活操作sqlite資料庫,詳見: http://blog.csdn.net/lk_blog/article/details/7455992


本示範範例:


列出主要代碼:

1.list.xml:

<?xml version="1.0" encoding="UTF-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/child"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:background="#E3D25E"    android:orientation="horizontal" >    <!-- 若想隱藏id增加此屬性: android:visibility="gone",這樣做有點相似於Html中hidden域 -->    <TextView        android:id="@+id/idTo"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:textColor="#ff0000" />    <TextView        android:id="@+id/nameTo"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:paddingBottom="5px"        android:paddingLeft="50px"        android:paddingTop="5px"        android:text="No data"        android:textColor="#0000ff"        android:textSize="20sp" />    <TextView        android:id="@+id/ageTo"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:paddingBottom="5px"        android:paddingLeft="50px"        android:paddingTop="5px"        android:text="No data"        android:textColor="#00ff00"        android:textSize="20sp" /></LinearLayout>

2.MainActivity.java:

package com.tgb.lk.listview;import java.util.List;import java.util.Map;import com.tgb.lk.demo.dao.StudentDao;import com.tgb.lk.demo.dao.impl.StudentDaoImpl;import com.tgb.lk.demo.model.Student;import com.tgb.lk.listview.R;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.text.TextUtils;import android.view.ContextMenu;import android.view.MenuItem;import android.view.View;import android.view.ContextMenu.ContextMenuInfo;import android.view.View.OnClickListener;import android.widget.AdapterView;import android.widget.Button;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.TextView;import android.widget.Toast;import android.widget.AdapterView.AdapterContextMenuInfo;import android.widget.AdapterView.OnItemClickListener;/** * 歡迎訪問我的部落格進行對代碼交流: http://blog.csdn.net/lk_blog * 資料庫處理使用AHibernate架構,詳見:http://blog.csdn.net/lk_blog/article/details/7455992 * @author likun */public class MainActivity extends Activity {private static final int ITEM_MODIFY = 1;private static final int ITEM_DELETE = 2;// 定義介面private StudentDao dao = null;private ListView lv = null;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);// 加入Button btnAdd = (Button) findViewById(R.id.btnAdd);btnAdd.setOnClickListener(listener);// 顯示前3條資料Button btnShow = (Button) findViewById(R.id.btnShow);btnShow.setOnClickListener(listener);// 刪除資料Button btnClear = (Button) findViewById(R.id.btnClear);btnClear.setOnClickListener(listener);lv = (ListView) findViewById(R.id.lvStudent);// 設定在條目上單擊監聽器lv.setOnItemClickListener(itemListener);// 設定長按事件registerForContextMenu(lv);// 顯示全部資料showData(-1);}// 顯示資料,num小於等於0時顯示全部資料,num大於0時顯示前N條.private void showData(int num) {dao = (dao == null ? new StudentDaoImpl(this) : dao);List<Map<String, String>> data = null;if (num <= 0) { // 顯示全部學生,調用dao層介面data = dao.queryAllStudent();} else {// 顯示前N個學生,調用dao層介面data = dao.queryTopN(num);}SimpleAdapter adapter = buildListAdapter(this, data);lv.setAdapter(adapter);}// 構建adapter.public SimpleAdapter buildListAdapter(Context context,List<Map<String, String>> data) {SimpleAdapter adapter = new SimpleAdapter(context, data, R.layout.list,new String[] { "_id", "name", "age" }, new int[] { R.id.idTo,R.id.nameTo, R.id.ageTo });return adapter;}// 初始化資料OnClickListener listener = new OnClickListener() {@Overridepublic void onClick(View v) {dao = (dao == null ? new StudentDaoImpl(MainActivity.this) : dao);switch (v.getId()) {case R.id.btnAdd:// 加入學生Student student1 = new Student();student1.setName("lk");student1.setAge(26);dao.insert(student1);Student student2 = new Student();student2.setName("cls");student2.setAge(26);dao.insert(student2);Student student3 = new Student();student3.setName("lb");student3.setAge(27);dao.insert(student3);showData(-1);break;case R.id.btnShow:// 顯示前3條資料showData(3);break;case R.id.btnClear:// 刪除全部資料dao.deleteData();// 顯示全部資料showData(-1);break;default:break;}}};// 條目上單擊處理方法.OnItemClickListener itemListener = new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position,long id) {// 這裡的view是我們在list.xml中定義的LinearLayout對象.// 所以能夠通過findViewById方法能夠找到list.xml中定義的它的子物件,例如以下:TextView stuId = (TextView) view.findViewById(R.id.idTo);TextView stuName = (TextView) view.findViewById(R.id.nameTo);TextView stuAge = (TextView) view.findViewById(R.id.ageTo);toastShow("學號:" + stuId.getText().toString() + "; 姓名:"+ stuName.getText().toString() + "; 年齡:"+ stuAge.getText().toString());}};// 封裝Toast,一方面調用簡單,還有一方面調整顯示時間僅僅要改此一個地方就可以.public void toastShow(String text) {Toast.makeText(MainActivity.this, text, 1000).show();}// 長按時顯示的菜單@Overridepublic void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {menu.setHeaderTitle("請選擇操作");menu.add(0, ITEM_MODIFY, 0, "編輯");menu.add(0, ITEM_DELETE, 1, "刪除");}// 響應編輯和刪除事件處理public boolean onContextItemSelected(MenuItem item) {AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();// info.targetView得到list.xml中的LinearLayout對象.String stuId = ((TextView) info.targetView.findViewById(R.id.idTo)).getText().toString();if (!TextUtils.isEmpty(stuId)) {int id = Integer.parseInt(stuId);dao = (dao == null ? new StudentDaoImpl(this) : dao);switch (item.getItemId()) {case ITEM_MODIFY:// 編輯資料toastShow("編輯" + stuId);// 此方法定義在AHibernate中.很多其它使用示範範例見http://blog.csdn.net/lk_blog/article/details/7455992Student student = dao.get(id);student.setName("李坤");student.setAge(26);dao.update(student); // 此方法定義在AHibernate中.break;case ITEM_DELETE:// 刪除資料toastShow("刪除" + stuId);dao.delete(id);// 此方法定義在AHibernate中.break;default:break;}}showData(-1);return false;}}

3.資料庫處理層:StudentDaoImpl.java:

package com.tgb.lk.demo.dao.impl;import java.util.List;import java.util.Map;import com.tgb.lk.ahibernate.dao.impl.BaseDaoImpl;import com.tgb.lk.demo.dao.StudentDao;import com.tgb.lk.demo.model.Student;import com.tgb.lk.demo.util.DBHelper;import android.content.Context;//本文資料庫處理引用jar包AHibernate處理.//AHibernate的具體使用教程示範範例地址: http://blog.csdn.net/lk_blog/article/details/7455992//AHibernate源碼交流地址: http://blog.csdn.net/lk_blog/article/details/7456125//AHibernate jar包下載及源碼: http://download.csdn.net/detail/lk_blog/4222048public class StudentDaoImpl extends BaseDaoImpl<Student> implements StudentDao {public StudentDaoImpl(Context context) {super(new DBHelper(context));}// 返回一個List,List中的對象是以sql中的列的小寫形式為key的Map.(本例中 _id,name,age為key)public List<Map<String, String>> queryAllStudent() {String sql = "select _id, name,age from t_student";return super.query2MapList(sql, null);}// 返回一個List,List中的對象是以sql中的列的小寫形式為key的Map.(本例中 _id,name,age為key)public List<Map<String, String>> queryTopN(int num) {String sql = "select _id, name,age from t_student limit ?";return super.query2MapList(sql, new String[] { String.valueOf(num) });}public void deleteData() {String sql = "delete from t_student";super.execSql(sql, null);}}
本示範範例源碼:  http://download.csdn.net/detail/lk_blog/4278055

最後,希望大家指教,對本文不足之處進行批評指正.







android listview綜合使用示範範例_結合資料庫操作和listitem單擊長按等事件處理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.