listview 와 SQLite 를 결합 하여 수첩 기능 을 실현 합 니 다.

16849 단어 Android수첩
안 드 로 이 드 수첩 의 demo 는 인터넷 에서 한 무더기 의 검색 을 하지만 대신 이 쓴 demo 는 기능 이 너무 많아 초보 자 들 이 손 을 쓰기 어렵 고 뜯 기 어렵다.한편,일부 새로운 손 으로 쓴 demo 는 흔히 이것저것 긁 어 모 으 고 코드 는 copy 의 다른 사람의 것 이 많 으 며 프로젝트 에 직접 넣 어서 사용 하 는데 코드 가 어떤 역할 을 하 는 지 모른다.종종 코드 가 매우 못 생기 고 중복 성 코드 도 비교적 많다.
필 자 는 최근 에 이곳 을 배 워 서 자신 이 이해 한 후에 도 초보 자 들 이 공부 할 수 있 도록 데 모 를 쓸 계획 이다.코드 는 우아 하 다 고 할 수 는 없 지만 필자 가 보기 에는 쉽게 이해 할 수 있 도록 최선 을 다 한 것 같다.소스 코드
초보 자 들 의 학습 을 편리 하 게 하기 위해 서 여기 서도 관련 된 지식 점 을 나열 합 니 다.
1.SQLite 의 기본 사용,추가 삭제 및 수정
2.listview,adapeter 의 기본 사용
3.activity 수명 주기
4.intent,bundle 전달 매개 변수
5.AlertDialog 의 기본 사용
그리고 바 이 두 에서 얻 을 수 있 는 자질구레한 지식 도 있다.
질문
SQLite 에 문제 가 있 습 니 다.메 인 키 가 자동 으로 정렬 되 지 않 는 다 는 것 입 니 다.예 를 들 어 메 인 키 id 는 1,2,3,4 개의 기록 이다.현재 23 을 삭제 하고 14 개의 기록 이 남 았 습 니 다.다시 삽입 할 때 id 는 2 가 아 닌 5 가 됩 니 다.초기 4 개의 기록 을 바탕 으로 이 4 개의 기록 을 모두 삭제 하고 다시 삽입 할 때 얻 은 id 는 5 입 니 다.
필 자 는 이 점 에서 도 비교적 오 랜 시간 이 걸 렸 다.코드 를 간소화 하기 위해 listview 의 arg 2 로 데이터베이스 에 기 록 된 id 를 직접 조작 하 는 것 이 라 고 생각 했 지만 SQLite 의 이 문제 로 인해 이런 방법 에 문제 가 생 겼 다.
마지막 으로 필 자 는 내용 검색 방법 으로 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> 
 마지막 으로 소스 코드 를 동봉 합 니 다수첩
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기