国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

listview與SQLite結合實現記事本功能

2019-10-22 18:21:46
字體:
來源:轉載
供稿:網友

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

筆者近期學到此處,自己理解之后也還是打算寫個demo供新手學習一下。代碼說不上優雅,但在筆者看來已經盡力去讓人容易理解了。(源碼在文章結尾)

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

另外還有一些零碎知識點都可以百度到。

遇到的問題:

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

效果: 

Android,記事本,listview

Android,記事本,listview

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<Map<String, Object>> 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顯示的時候更新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<Map<String, Object>>();   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已經有的內容,全部刪掉   //并且更新simp_adapter   int size = dataList.size();   if (size > 0) {    dataList.removeAll(dataList);    simple_adapter.notifyDataSetChanged();   }    //從數據庫讀取信息   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<String, Object> map = new HashMap<String, Object>();    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);  }     // 點擊listview中某一項的點擊監聽事件  @Override  public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {   //獲取listview中此個item中的內容   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);   }   // 點擊listview中某一項長時間的點擊事件  @Override  public boolean onItemLongClick(AdapterView<?> arg0, View arg1, final int arg2,          long arg3) {   Builder builder = new Builder(this);   builder.setTitle("刪除該日志");   builder.setMessage("確認刪除嗎?");   builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {    @Override    public void onClick(DialogInterface dialog, int which) {     //獲取listview中此個item中的內容     //刪除該行后刷新listview的內容     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;//用來區分是新建一個note還是更改原來的note  public String last_content;//用來獲取edittext內容   @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);    //獲取此時時刻時間   Date date = new Date();   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");   String dateString = sdf.format(date);   tv_date.setText(dateString);    //接收內容和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內容     String content = et_content.getText().toString();      // 添加一個新的日志     if (enter_state == 0) {      if (!content.equals("")) {       //獲取此時時刻時間       Date date = new Date();       SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");       String dateString = sdf.format(date);        //向數據庫添加信息       ContentValues values = new ContentValues();       values.put("content", content);       values.put("date", dateString);       db.insert("note", null, values);       finish();      } else {       Toast.makeText(noteEdit.this, "請輸入你的內容!", Toast.LENGTH_SHORT).show();      }     }     // 查看并修改一個已有的日志     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:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="fill_parent"  android:layout_height="fill_parent"  android:orientation="vertical" >   <TextView   android:layout_height="wrap_content"   android:layout_width="fill_parent"   android:text="記事本"   android:textStyle="bold"   android:textSize="22sp"   android:padding="15dp"   android:background="#000"   android:textColor="#fff"   />   <LinearLayout   android:layout_width="fill_parent"   android:layout_height="0dp"   android:layout_weight="1" >    <ListView    android:id="@+id/listview"    android:layout_margin="5dp"    android:layout_width="match_parent"    android:layout_height="wrap_content" >   </ListView>  </LinearLayout>   <Button   android:id="@+id/btn_editnote"   android:layout_width="fill_parent"   android:layout_height="wrap_content"   android:text="添加備忘錄"   android:padding="10dp"   android:textSize="20sp" />  </LinearLayout> 

edit:

<?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="vertical">   <LinearLayout   android:layout_width="match_parent"   android:layout_height="wrap_content"   android:background="#000"   android:orientation="vertical"    android:padding="15dp">    <TextView    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:text="編輯備忘錄"    android:textColor="#fff"    android:textSize="22sp"    android:textStyle="bold" />    <TextView    android:id="@+id/tv_date"    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:gravity="end"    android:text="編輯時間"    android:textColor="#fff" />  </LinearLayout>   <LinearLayout   android:layout_width="match_parent"   android:layout_height="0dp"   android:layout_weight="1"   android:padding="10dp"   android:orientation="vertical">   <TextView    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:text="內容編輯:"    android:textColor="#000"    android:textSize="20sp"    android:layout_margin="10dp"    android:textStyle="bold" />    <EditText    android:id="@+id/et_content"    android:layout_width="match_parent"    android:layout_height="0dp"    android:layout_weight="1"    android:background="@drawable/edit_text_style"    android:gravity="start"    android:hint="此處記錄備忘事件"    android:textSize="20sp" />    <LinearLayout    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:orientation="horizontal">     <Button     android:id="@+id/btn_cancel"     android:layout_width="0dp"     android:layout_height="wrap_content"     android:layout_weight="1"     android:text="取消" />     <Button     android:id="@+id/btn_ok"     android:layout_width="0dp"     android:layout_height="wrap_content"     android:layout_weight="1"     android:text="保存" />    </LinearLayout>  </LinearLayout>  </LinearLayout> 

item:

<?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:padding="10dp"  android:orientation="vertical">   <TextView   android:id="@+id/tv_content"   android:layout_width="match_parent"   android:layout_height="wrap_content"   android:singleLine="true"   android:textSize="20sp"   android:textColor="#000"   android:text="Large Text" />   <TextView   android:id="@+id/tv_date"   android:layout_width="fill_parent"   android:layout_height="wrap_content"   android:text="TextView" />  </LinearLayout> 

 最后附上源碼:記事本

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 景东| 新蔡县| 衡水市| 休宁县| 浦县| 江都市| 临沭县| 卢氏县| 施甸县| 民权县| 平果县| 土默特左旗| 昆山市| 宁化县| 富宁县| 晋中市| 扎兰屯市| 新蔡县| 温宿县| 彰化县| 略阳县| 东台市| 育儿| 军事| 扶绥县| 石家庄市| 信宜市| 孟津县| 方正县| 云梦县| 通渭县| 历史| 晋州市| 闽清县| 蕲春县| 莆田市| 通渭县| 灯塔市| 吴川市| 永胜县| 澳门|