精品专区-精品自拍9-精品自拍三级乱伦-精品自拍视频-精品自拍视频曝光-精品自拍小视频

網(wǎng)站建設(shè)資訊

NEWS

網(wǎng)站建設(shè)資訊

android中l(wèi)istview與SQLite結(jié)合如何實(shí)現(xiàn)記事本功能-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)android中l(wèi)istview與SQLite結(jié)合如何實(shí)現(xiàn)記事本功能,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

目前創(chuàng)新互聯(lián)已為上千多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁(yè)空間、網(wǎng)站托管、服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、平遠(yuǎn)網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

android記事本的demo在網(wǎng)上一搜一大堆,但是大神寫(xiě)的demo往往功能太多導(dǎo)致新手難以著手,很難啃得動(dòng);而一些新手寫(xiě)的demo又往往是東拼西湊,代碼很多都是copy的別人的,直接放在項(xiàng)目里面用,也不知道代碼有什么作用。往往代碼特別丑,重復(fù)性的代碼也比較多。

筆者近期學(xué)到此處,自己理解之后也還是打算寫(xiě)個(gè)demo供新手學(xué)習(xí)一下。代碼說(shuō)不上優(yōu)雅,但在筆者看來(lái)已經(jīng)盡力去讓人容易理解了。

為了便于新手學(xué)習(xí),在此也是羅列一下涉及的知識(shí)點(diǎn):
1、SQLite的基本使用,增刪查改
2、listview,adapeter的基本使用
3、activity生命周期
4、intent、bundle傳遞參數(shù)
5、AlertDialog的基本使用

另外還有一些零碎知識(shí)點(diǎn)都可以百度到。

遇到的問(wèn)題:

SQlite有個(gè)問(wèn)題,就是主鍵不能夠自動(dòng)排序。比如說(shuō)主鍵id為1 2 3 4,共4條記錄。現(xiàn)在刪除2 3,還剩下1 4記錄,當(dāng)再次插入時(shí),id會(huì)變成5,而不是2.假設(shè)在初始4條記錄的基礎(chǔ)上,把這4條記錄全都刪掉,再次插入時(shí),得到的id是5.
筆者在這點(diǎn)上也是花了比較久的時(shí)間,原本為了精簡(jiǎn)代碼,想法是用listview中的arg2直接通過(guò)數(shù)據(jù)庫(kù)記錄的id進(jìn)行操作,但是由于SQLite的這個(gè)問(wèn)題,所以這種方法就有問(wèn)題了。
最終,筆者采用的是內(nèi)容搜索的方法,從listview的每個(gè)item中獲取內(nèi)容,然后到數(shù)據(jù)庫(kù)中通過(guò)內(nèi)容搜索該記錄,最后對(duì)其進(jìn)行操作。

效果:

android中l(wèi)istview與SQLite結(jié)合如何實(shí)現(xiàn)記事本功能

android中l(wèi)istview與SQLite結(jié)合如何實(shí)現(xiàn)記事本功能

MainActivity:

import android.app.Activity; 
import android.app.AlertDialog.Builder; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.AdapterView.OnItemLongClickListener; 
import android.widget.Button; 
import android.widget.ListView; 
import android.widget.SimpleAdapter; 
import android.widget.TextView; 
 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
 
public class MainActivity extends Activity implements 
  OnItemClickListener, OnItemLongClickListener { 
 
 private ListView listview; 
 private SimpleAdapter simple_adapter; 
 private List> dataList; 
 private Button addNote; 
 private TextView tv_content; 
 private NoteDateBaseHelper DbHelper; 
 private SQLiteDatabase DB; 
 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
  super.onCreate(savedInstanceState); 
  setContentView(R.layout.activity_main); 
 
  InitView(); 
 } 
 
 //在activity顯示的時(shí)候更新listview 
 @Override 
 protected void onStart() { 
  super.onStart(); 
  RefreshNotesList(); 
 } 
 
 
 private void InitView() { 
  tv_content = (TextView) findViewById(R.id.tv_content); 
  listview = (ListView) findViewById(R.id.listview); 
  dataList = new ArrayList>(); 
  addNote = (Button) findViewById(R.id.btn_editnote); 
  DbHelper = new NoteDateBaseHelper(this); 
  DB = DbHelper.getReadableDatabase(); 
 
  listview.setOnItemClickListener(this); 
  listview.setOnItemLongClickListener(this); 
  addNote.setOnClickListener(new OnClickListener() { 
 
   @Override 
   public void onClick(View arg0) { 
    Intent intent = new Intent(MainActivity.this, noteEdit.class); 
    Bundle bundle = new Bundle(); 
    bundle.putString("info", ""); 
    bundle.putInt("enter_state", 0); 
    intent.putExtras(bundle); 
    startActivity(intent); 
   } 
  }); 
 } 
 
 
 //刷新listview 
 public void RefreshNotesList() { 
  //如果dataList已經(jīng)有的內(nèi)容,全部刪掉 
  //并且更新simp_adapter 
  int size = dataList.size(); 
  if (size > 0) { 
   dataList.removeAll(dataList); 
   simple_adapter.notifyDataSetChanged(); 
  } 
 
  //從數(shù)據(jù)庫(kù)讀取信息 
  Cursor cursor = DB.query("note", null, null, null, null, null, null); 
  startManagingCursor(cursor); 
  while (cursor.moveToNext()) { 
   String name = cursor.getString(cursor.getColumnIndex("content")); 
   String date = cursor.getString(cursor.getColumnIndex("date")); 
   Map map = new HashMap(); 
   map.put("tv_content", name); 
   map.put("tv_date", date); 
   dataList.add(map); 
  } 
  simple_adapter = new SimpleAdapter(this, dataList, R.layout.item, 
    new String[]{"tv_content", "tv_date"}, new int[]{ 
    R.id.tv_content, R.id.tv_date}); 
  listview.setAdapter(simple_adapter); 
 } 
 
 
 
 // 點(diǎn)擊listview中某一項(xiàng)的點(diǎn)擊監(jiān)聽(tīng)事件 
 @Override 
 public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { 
  //獲取listview中此個(gè)item中的內(nèi)容 
  String content = listview.getItemAtPosition(arg2) + ""; 
  String content1 = content.substring(content.indexOf("=") + 1, 
    content.indexOf(",")); 
 
  Intent myIntent = new Intent(MainActivity.this, noteEdit.class); 
  Bundle bundle = new Bundle(); 
  bundle.putString("info", content1); 
  bundle.putInt("enter_state", 1); 
  myIntent.putExtras(bundle); 
  startActivity(myIntent); 
 
 } 
 
 // 點(diǎn)擊listview中某一項(xiàng)長(zhǎng)時(shí)間的點(diǎn)擊事件 
 @Override 
 public boolean onItemLongClick(AdapterView arg0, View arg1, final int arg2, 
         long arg3) { 
  Builder builder = new Builder(this); 
  builder.setTitle("刪除該日志"); 
  builder.setMessage("確認(rèn)刪除嗎?"); 
  builder.setPositiveButton("確定", new DialogInterface.OnClickListener() { 
   @Override 
   public void onClick(DialogInterface dialog, int which) { 
    //獲取listview中此個(gè)item中的內(nèi)容 
    //刪除該行后刷新listview的內(nèi)容 
    String content = listview.getItemAtPosition(arg2) + ""; 
    String content1 = content.substring(content.indexOf("=") + 1, 
      content.indexOf(",")); 
    DB.delete("note", "content = ?", new String[]{content1}); 
    RefreshNotesList(); 
   } 
  }); 
  builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { 
   @Override 
   public void onClick(DialogInterface dialog, int which) { 
   } 
  }); 
  builder.create(); 
  builder.show(); 
  return true; 
 }

NoteDateBaseHelper:

import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
 
public class NoteDateBaseHelper extends SQLiteOpenHelper { 
 
 public static final String CreateNote = "create table note (" 
   + "id integer primary key autoincrement, " 
   + "content text , " 
   + "date text)"; 
 
 public NoteDateBaseHelper(Context context) { 
  super(context, "note", null, 1); 
 } 
 
 @Override 
 public void onCreate(SQLiteDatabase db) { 
  db.execSQL(CreateNote); 
 } 
 
 @Override 
 public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { 
  // TODO Auto-generated method stub 
 
 } 
 
 
}

noteEdit:

import android.app.Activity; 
import android.content.ContentValues; 
import android.database.sqlite.SQLiteDatabase; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 
 
import java.text.SimpleDateFormat; 
import java.util.Date; 
 
public class noteEdit extends Activity implements OnClickListener { 
 private TextView tv_date; 
 private EditText et_content; 
 private Button btn_ok; 
 private Button btn_cancel; 
 private NoteDateBaseHelper DBHelper; 
 public int enter_state = 0;//用來(lái)區(qū)分是新建一個(gè)note還是更改原來(lái)的note 
 public String last_content;//用來(lái)獲取edittext內(nèi)容 
 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
  super.onCreate(savedInstanceState); 
  setContentView(R.layout.edit); 
 
  InitView(); 
 } 
 
 private void InitView() { 
  tv_date = (TextView) findViewById(R.id.tv_date); 
  et_content = (EditText) findViewById(R.id.et_content); 
  btn_ok = (Button) findViewById(R.id.btn_ok); 
  btn_cancel = (Button) findViewById(R.id.btn_cancel); 
  DBHelper = new NoteDateBaseHelper(this); 
 
  //獲取此時(shí)時(shí)刻時(shí)間 
  Date date = new Date(); 
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); 
  String dateString = sdf.format(date); 
  tv_date.setText(dateString); 
 
  //接收內(nèi)容和id 
  Bundle myBundle = this.getIntent().getExtras(); 
  last_content = myBundle.getString("info"); 
  enter_state = myBundle.getInt("enter_state"); 
  et_content.setText(last_content); 
 
  btn_cancel.setOnClickListener(this); 
  btn_ok.setOnClickListener(this); 
 } 
 
 @Override 
 public void onClick(View view) { 
  switch (view.getId()) { 
   case R.id.btn_ok: 
    SQLiteDatabase db = DBHelper.getReadableDatabase(); 
    // 獲取edittext內(nèi)容 
    String content = et_content.getText().toString(); 
 
    // 添加一個(gè)新的日志 
    if (enter_state == 0) { 
     if (!content.equals("")) { 
      //獲取此時(shí)時(shí)刻時(shí)間 
      Date date = new Date(); 
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); 
      String dateString = sdf.format(date); 
 
      //向數(shù)據(jù)庫(kù)添加信息 
      ContentValues values = new ContentValues(); 
      values.put("content", content); 
      values.put("date", dateString); 
      db.insert("note", null, values); 
      finish(); 
     } else { 
      Toast.makeText(noteEdit.this, "請(qǐng)輸入你的內(nèi)容!", Toast.LENGTH_SHORT).show(); 
     } 
    } 
    // 查看并修改一個(gè)已有的日志 
    else { 
     ContentValues values = new ContentValues(); 
     values.put("content", content); 
     db.update("note", values, "content = ?", new String[]{last_content}); 
     finish(); 
    } 
    break; 
   case R.id.btn_cancel: 
    finish(); 
    break; 
  } 
 } 
}

activity_main:

 
 
  
 
  
 
   
   
  
 
  
 

edit:

 
 
 
  
 
   
 
   
  
 
  
   
 
   
 
   
 
    
 
    
 
   
  
 

item:

 
 
 
  
 
  
 

關(guān)于“android中l(wèi)istview與SQLite結(jié)合如何實(shí)現(xiàn)記事本功能”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。


網(wǎng)站標(biāo)題:android中l(wèi)istview與SQLite結(jié)合如何實(shí)現(xiàn)記事本功能-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://m.jcarcd.cn/article/dddecc.html
主站蜘蛛池模板: 日韩高清在线亚洲 | 日本一区二区在线 | 国产乱了真实 | 国产卡一卡二卡三卡 | 国产特级v毛卡片 | 国产亚洲欧美丝袜 | 老牛色导航 | 国产自产在 | 欧美性爱一级a | 黑人巨大 | 欧美专区日韩在线 | 91李宗精品72| 成人拍拍拍社区 | 国产精品刺激 | 韩国三级| 国产国产东北 | 国产精品视频网 | 海角大神邻居 | 国产亚洲精品欧洲 | ww网站免 | 午夜视频导航 | 日韩亚洲欧美理论片 | 国产福利在线观 | 日本在线成人短视频 | 欧美日韩影院 | 精品中文 | 99在线视 | 丝袜一区二区高跟鞋 | 国产乱人视频在 | 精品美女| 成人家庭影院 | 国产手机在线观看 | 国产va免费高 | 精品亚洲二区 | 国产免码va在 | 乱伦亚洲| 国产综合成人色产三 | 国产精品在线系列 | 日本欧美一区二区 | 福利导航网址在线 | 日本三级国产在线 |