Android 간이 수첩 구현
이번에 만 든 안 드 로 이 드 간이 수첩 의 저장 방식 은 SQLite 데이터 베 이 스 를 사용 한 다음 에 인터페이스의 실현 이 비교적 간단 하지만 삭제 하고 검사 하 는 기본 기능 이 있 습 니 다.여기 서 효과 도 를 볼 수 있 습 니 다.다음 과 같 습 니 다.
구체 적 인 조작 은 길 게 누 르 면 조작 을 삭제 할 수 있 고,누 르 면 수정 할 수 있 으 며,노트 추가 단 추 를 누 르 면 노트 를 추가 할 수 있다.
먼저,우 리 는 세 개의 인터페이스 스타일 이 필요 합 니 다.하 나 는 우리 가 프로그램 에 들 어 갈 때의 첫 번 째 인터페이스 입 니 다.그 다음 에 첫 번 째 인터페이스 에 ListView 가 있 습 니 다.이 ListView 는 xml 로 안의 각 요 소 를 묘사 해 야 합 니 다.이것 도 두 번 째 입 니 다.또 하 나 는 우리 의 편집 페이지 의 인터페이스 이다.
세 개의 xml 설명 파일 은 다음 과 같 습 니 다.
activity_main.xml:프로그램의 첫 번 째 인터페이스 에 들 어 갑 니 다.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
<TextView
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text=" "
android:textSize="20sp"
android:paddingTop="10dp"
android:paddingBottom="5dp"
android:gravity="center"/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1" >
<ListView
android:id="@+id/listNote"
android:layout_margin="5dp"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
<Button
android:id="@+id/addNote"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginBottom="10dp"
android:text=" "
android:textSize="20sp" />
</LinearLayout>
note_item.xml:메모 장 목록 의 모든 요 소 를 설명 하 는 컨트롤
<?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" >
<TextView
android:id="@+id/noteTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:singleLine="true"
android:text=""
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/noteCreateTime"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="" />
</LinearLayout>
note_editor.xml:편집 인터페이스
<?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" >
<TextView
android:id="@+id/noteId"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""/>
<EditText
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint=" ">
<requestFocus />
</EditText>
<EditText
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:hint=" "
android:gravity="left">
</EditText>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_gravity="center"
android:gravity="center">
<Button
android:id="@+id/save"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginBottom="10dp"
android:text=" "
android:textSize="20sp" />
<Button
android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginBottom="10dp"
android:text=" "
android:textSize="20sp" />
</LinearLayout>
</LinearLayout>
이제 우 리 는 우리 밑바닥 의 데이터베이스 조작 을 고려 할 수 있다.여기 에는 데이터베이스 와 접촉 하 는 데 전문 적 으로 사용 되 는 종류 가 있다.다음 과 같다.DBService.java
public class DBService {
private static SQLiteDatabase db = null;
static {
// db
db = SQLiteDatabase.openOrCreateDatabase("data/data/cn.lger.notebook/NoteBook.db", null);
String sql = "create table NoteBook(_id integer primary key autoincrement,title varchar(255),content TEXT, createTime varchar(25))";
// NoteBook, ,
try{
db.rawQuery("select count(1) from NoteBook ",null);
}catch(Exception e){
db.execSQL(sql);
}
}
public static SQLiteDatabase getSQLiteDatabase(){
return db;
}
public static Cursor queryAll(){
return db.rawQuery("select * from NoteBook ",null);
}
public static Cursor queryNoteById(Integer id){
return db.rawQuery("select * from NoteBook where _id =?",new String[]{id.toString()});
}
public static void deleteNoteById(Integer id){
if(id == null)
return ;
db.delete("NoteBook", "_id=?", new String[]{id.toString()});
}
public static void updateNoteById(Integer id, ContentValues values){
db.update("NoteBook", values, "_id=?", new String[]{id.toString()});
}
/**
* ,
* @param values
*/
public static void addNote(ContentValues values){
values.put("createTime", DateFormat.format("yyyy-MM-dd kk:mm:ss", System.currentTimeMillis()).toString());
db.insert("NoteBook", null, values);
}
}
다음은 첫 번 째 인터페이스 에 들 어 갈 때 데이터 베 이 스 를 방문 하고 데이터 의 값 을 계속 업데이트 해 야 합 니 다(예 를 들 어 삭제 작업 을 했 을 때 나 추가 작업 을 한 후에 새로 고침 해 야 합 니 다).그러면 우 리 는 Activity 의 onResume()을 다시 써 야 합 니 다.그러면 Cursor 의 requery()를 호출 하여 목록 의 ListView 결 과 를 새로 고 칠 수 있 습 니 다.그리고 우 리 는 길 게 누 르 고 삭제 하고 수정 을 클릭 하 며 필 기 를 추가 해 야 합 니 다.이런 것들 은 모두 감청 사건 이 필요 하기 때문에 감청 도 설치 해 야 합 니 다.구체 적 인 MainActivity.java 코드 는 다음 과 같 습 니 다.
public class MainActivity extends Activity {
private Cursor listItemCursor = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// , activity
this.findViewById(R.id.addNote).setOnClickListener(
new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent in = new Intent();
in.setClassName(getApplicationContext(),
"cn.lger.notebook.NoteEditActivity");
startActivity(in);
}
});
// ,
listItemCursor = DBService.queryAll();
SimpleCursorAdapter adapter = new SimpleCursorAdapter(MainActivity.this,
R.layout.note_item, listItemCursor, new String[] { "_id",
"title", "createTime" }, new int[] { R.id.noteId,
R.id.noteTitle, R.id.noteCreateTime },
CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
((ListView) this.findViewById(R.id.listNote)).setAdapter(adapter);
initListNoteListener();
}
/**
*
*/
private void initListNoteListener() {
//
((ListView) this.findViewById(R.id.listNote))
.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent,
View view, int position, final long id) {
new AlertDialog.Builder(MainActivity.this)
.setTitle(" ")
.setMessage(" ??")
.setPositiveButton(" ",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0,int arg1) {
DBService.deleteNoteById((int) id);
//
MainActivity.this.onResume();
Toast.makeText(
MainActivity.this,
" !!",
Toast.LENGTH_LONG)
.show();
}
}).setNegativeButton(" ", null).show();
return false;
}
});
//
((ListView) this.findViewById(R.id.listNote))
.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent in = new Intent();
in.setClassName(view.getContext(),
"cn.lger.notebook.NoteEditActivity");
// id Intent,
in.putExtra("id", id);
startActivity(in);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
/**
*
*/
@Override
protected void onResume() {
super.onResume();
//
if (listItemCursor != null) {
listItemCursor.requery();
}
}
}
위의 코드 에는 보기 전환 후 정 보 를 전달 하 는 동작 도 포함 되 어 있 습 니 다.즉,Intent 의 putExtra(key,value)를 통 해 전환 후의 보기에 서 함수 getIntent().get~Extra(key,replace)를 호출 할 수 있 습 니 다.전 달 된 데 이 터 를 받 으 러 왔 습 니 다.다음은 우리 의 편집 인터페이스 에 대응 하 는 구체 적 인 실현 코드 입 니 다.여 기 는 업데이트 작업 을 사용 하 는 지,추가 작업 을 사용 하 는 지 판단 합 니 다.주로 MainActivity.java 가 id 를 전 달 했 는 지 판단 합 니 다.있 으 면 이 id 를 통 해 작업 을 업데이트 하 는 것 입 니 다.없 으 면 추가 작업 입 니 다.
편집 인터페이스 에 대응 하 는 구체 적 인 실현 코드 는 다음 과 같다.
NoteEditActivity.java
public class NoteEditActivity extends Activity {
private EditText titleEditText = null;
private EditText contentEditText = null;
private String noteId = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.note_editor);
titleEditText = (EditText) NoteEditActivity.this
.findViewById(R.id.title);
contentEditText = (EditText) NoteEditActivity.this
.findViewById(R.id.content);
initNoteEditValue();
//
this.findViewById(R.id.cancel).setOnClickListener(
new OnClickListener() {
@Override
public void onClick(View arg0) {
NoteEditActivity.this.finish();
}
});
this.findViewById(R.id.save).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
final String title = titleEditText.getText().toString();
final String content = contentEditText.getText().toString();
// ,
if ("".equals(title) || "".equals(content)) {
Toast.makeText(NoteEditActivity.this, " ",
Toast.LENGTH_LONG).show();
return;
}
//
new AlertDialog.Builder(NoteEditActivity.this)
.setTitle(" ")
.setMessage(" ??")
.setPositiveButton(" ",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0,
int arg1) {
ContentValues values = new ContentValues();
values.put("title", title);
values.put("content", content);
// noteId ,
if (null == noteId || "".equals(noteId))
DBService.addNote(values);
else
DBService.updateNoteById(
Integer.valueOf(noteId),
values);
// activity
NoteEditActivity.this.finish();
Toast.makeText(NoteEditActivity.this, " !!",
Toast.LENGTH_LONG).show();
}
}).setNegativeButton(" ", null).show();
}
});
}
/**
* ( id ), , 。
*/
private void initNoteEditValue() {
// Intent id
long id = this.getIntent().getLongExtra("id", -1L);
// id id!=-1
if (id != -1L) {
// noteId id
noteId = String.valueOf(id);
// id
Cursor cursor = DBService.queryNoteById((int) id);
if (cursor.moveToFirst()) {
//
titleEditText.setText(cursor.getString(1));
contentEditText.setText(cursor.getString(2));
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
이상 은 우리 의 안 드 로 이 드 간이 수첩 을 완 성 했 고 소스 코드 는 이미 업로드 되 었 습 니 다GitHub인터페이스 에서 가 져 오기 주 의 를 채택 하 였 으 니,아래 문장 을 참고 할 수 있다.
android 메모 장 앱 구현
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.