這篇文章將為大家詳細(xì)講解有關(guān)android中l(wèi)istview與SQLite結(jié)合如何實(shí)現(xiàn)記事本功能,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
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)行操作。
效果:
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
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)把它分享出去讓更多的人看到。