listview 와 SQLite 를 결합 하여 수첩 기능 을 실현 합 니 다.
필 자 는 최근 에 이곳 을 배 워 서 자신 이 이해 한 후에 도 초보 자 들 이 공부 할 수 있 도록 데 모 를 쓸 계획 이다.코드 는 우아 하 다 고 할 수 는 없 지만 필자 가 보기 에는 쉽게 이해 할 수 있 도록 최선 을 다 한 것 같다.소스 코드
초보 자 들 의 학습 을 편리 하 게 하기 위해 서 여기 서도 관련 된 지식 점 을 나열 합 니 다.
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>
마지막 으로 소스 코드 를 동봉 합 니 다수첩이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.