android 메모 장 앱 구현

22284 단어 android수첩app
자신 이 쓴 간단 한 메모 장 app 의 효 과 는 다음 과 같 습 니 다.

첫째,첫 번 째 인터페이스의 작성 입 니 다.맨 위 는 TextView 입 니 다.중간 은 Linearlayout 에 listview 레이아웃 을 포함 하고 맨 아래 는 button 입 니 다.첫 번 째 페이지 의 간단 한 레이아웃 xml 파일 을 첨부 합 니 다.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent" 
 android:background="@android:color/darker_gray" 
 android:orientation="vertical" > 
 <TextView 
 android:layout_height="wrap_content" 
 android:layout_width="fill_parent" 
 android:text="     " 
 android:textSize="20sp" 
 android:paddingTop="10dp" 
 android:paddingBottom="5dp" 
 android:background="#039DCF" 
 android:gravity="center"/> 
 
 <LinearLayout 
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent" 
 android:layout_weight="1" > 
 
 <ListView 
 android:id="@+id/listview" 
 android:layout_margin="5dp" 
 android:background="#81966F" 
 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:background="@drawable/btn_selctor" 
 android:layout_gravity="center" 
 android:layout_marginBottom="10dp" 
 android:text="     " 
 android:textSize="20sp" /> 
 
</LinearLayout>
button 스타일 btnselector 는 자신 이 정의 한 button 스타일 입 니 다.
둘째,ListView 에 표 시 된 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/tv_content" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_marginLeft="10dp" 
 android:singleLine="true" 
 android:text="Large Text" 
 android:textAppearance="?android:attr/textAppearanceLarge" /> 
 
 <TextView 
 android:id="@+id/tv_date" 
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:layout_marginLeft="10dp" 
 android:text="TextView" /> 
 
</LinearLayout> 
3.두 번 째 인터페이스 스타일 을 작성 합 니 다.두 번 째 화면 은 맨 위 에 있 는 linearlayout 입 니 다.그 안에 button 두 개 와 TextView 가 포함 되 어 있 습 니 다.코드 는 다음 과 같 습 니 다:

<?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:background="#FFAE99" 
 android:orientation="vertical" > 
 
 <LinearLayout 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" > 
 
 <Button 
 android:id="@+id/btn_cancel" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:background="@drawable/btn_selctor" 
 android:text="  " /> 
 
 <LinearLayout 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_gravity="center" 
 android:layout_weight="1" 
 android:orientation="vertical" > 
 
 <TextView 
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:gravity="center" 
 android:text="     " 
 android:textSize="20sp" /> 
 
 <TextView 
 android:id="@+id/tv_date" 
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:gravity="center" 
 android:text="" /> 
 </LinearLayout> 
 
 <Button 
 android:id="@+id/btn_ok" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:background="@drawable/btn_selctor" 
 android:text="  " /> 
 </LinearLayout> 
 
 <ScrollView 
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent" 
 android:scrollbars="vertical" > 
 
 <LinearLayout 
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent" 
 android:layout_marginLeft="2dp" 
 android:orientation="vertical" > 
 
 <EditText 
 android:id="@+id/et_content" 
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:background="#FFAE99" 
 android:textSize="20sp" /> 
 </LinearLayout> 
 </ScrollView> 
 
</LinearLayout> 
4.로그 의 데 이 터 를 데이터베이스 에 저장 하고 sqlite 를 사용 하여 데이터 베 이 스 를 만 듭 니 다.데이터 베 이 스 는 세 가지 속성 이 있 습 니 다."id","content","date"세 가지 속성 으로 NoteDB 를 만들어 데이터 베 이 스 를 만 듭 니 다.

package com.example.datenote; 
 
import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 
 
public class NotesDB extends SQLiteOpenHelper { 
 
 public static final String TABLE_NAME_NOTES = "note"; 
 public static final String COLUMN_NAME_ID = "_id"; 
 public static final String COLUMN_NAME_NOTE_CONTENT = "content"; 
 public static final String COLUMN_NAME_NOTE_DATE = "date"; 
 
 public NotesDB(Context context) { 
 super(context, "note", null, 1); 
 // TODO Auto-generated constructor stub 
 } 
 
 @Override 
 public void onCreate(SQLiteDatabase db) { 
 String sql = "CREATE TABLE " + TABLE_NAME_NOTES + "(" + COLUMN_NAME_ID 
 + " INTEGER PRIMARY KEY AUTOINCREMENT," 
 + COLUMN_NAME_NOTE_CONTENT + " TEXT NOT NULL DEFAULT\"\"," 
 + COLUMN_NAME_NOTE_DATE + " TEXT NOT NULL DEFAULT\"\"" + ")"; 
 Log.d("SQL", sql); 
 db.execSQL(sql); 
// String sql1="insert into "+TABLE_NAME_NOTES+"values("+"1,"+"'   ',"+"'         '"+")"; 
// Log.d("SQL1", sql1); 
// db.execSQL(sql1); 
// ContentValues values=new ContentValues(); 
// values.put("id",1); 
// values.put("content","   "); 
// values.put("date", "2013-1-2"); 
// db.insert("note", null, values); 
 
 } 
 
 @Override 
 public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { 
 // TODO Auto-generated method stub 
 
 } 
 
} 
5.이벤트 추 가 를 클릭 하 는 점프 를 실현 합 니 다.첫 번 째 페이지 에서 비망록 추 가 를 클릭 하면 두 번 째 화면 으로 이동 합 니 다.클릭 이 벤트 를 설정 하고 하나의 activity 에서 다른 activity 로 이동 합 니 다.저 는 intent 방식 을 사용 합 니 다.또한,ListView 에서 기 록 된 로 그 를 클릭 하면 두 번 째 화면 으로 이동 합 니 다.빈 EditText 가 아니 라 로 그 를 포함 한 EditText 만 표 시 됩 니 다.MainActivity 는 다음 과 같 습 니 다.

package com.example.datenote; 
 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.AlertDialog.Builder; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.Window; 
import android.widget.AbsListView; 
import android.widget.AbsListView.OnScrollListener; 
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 android.widget.Toast; 
 
public class MainActivity extends Activity implements OnScrollListener, 
 OnItemClickListener, OnItemLongClickListener { 
 
 private Context mContext; 
 private ListView listview; 
 private SimpleAdapter simp_adapter; 
 private List<Map<String, Object>> dataList; 
 private Button addNote; 
 private TextView tv_content; 
 private NotesDB DB; 
 private SQLiteDatabase dbread; 
 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 requestWindowFeature(Window.FEATURE_NO_TITLE); 
 setContentView(R.layout.activity_main); 
 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); 
 mContext = this; 
 addNote.setOnClickListener(new OnClickListener() { 
 
 @Override 
 public void onClick(View arg0) { 
 noteEdit.ENTER_STATE = 0; 
 Intent intent = new Intent(mContext, noteEdit.class); 
 Bundle bundle = new Bundle(); 
 bundle.putString("info", ""); 
 intent.putExtras(bundle); 
 startActivityForResult(intent, 1); 
 } 
 }); 
 DB = new NotesDB(this); 
 dbread = DB.getReadableDatabase(); 
 //            
 //dbread.execSQL("delete from note"); 
 RefreshNotesList(); 
 
 listview.setOnItemClickListener(this); 
 listview.setOnItemLongClickListener(this); 
 listview.setOnScrollListener(this); 
 } 
 
 public void RefreshNotesList() { 
 
 int size = dataList.size(); 
 if (size > 0) { 
 dataList.removeAll(dataList); 
 simp_adapter.notifyDataSetChanged(); 
 listview.setAdapter(simp_adapter); 
 } 
 simp_adapter = new SimpleAdapter(this, getData(), R.layout.item, 
 new String[] { "tv_content", "tv_date" }, new int[] { 
  R.id.tv_content, R.id.tv_date }); 
 listview.setAdapter(simp_adapter); 
 } 
 
 private List<Map<String, Object>> getData() { 
 
 Cursor cursor = dbread.query("note", null, "content!=\"\"", null, null, 
 null, null); 
 
 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); 
 } 
 cursor.close(); 
 return dataList; 
 
 } 
 
 @Override 
 public void onScroll(AbsListView arg0, int arg1, int arg2, int arg3) { 
 // TODO Auto-generated method stub 
 
 } 
 
 //   listview     
 @Override 
 public void onScrollStateChanged(AbsListView arg0, int arg1) { 
 // TODO Auto-generated method stub 
 switch (arg1) { 
 case SCROLL_STATE_FLING: 
 Log.i("main", "           ,         ,           "); 
 case SCROLL_STATE_IDLE: 
 Log.i("main", "        "); 
 case SCROLL_STATE_TOUCH_SCROLL: 
 Log.i("main", "        ,      "); 
 } 
 } 
 
 //   listview          
 @Override 
 public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
 noteEdit.ENTER_STATE = 1; 
 // Log.d("arg2", arg2 + ""); 
 // TextView 
 // content=(TextView)listview.getChildAt(arg2).findViewById(R.id.tv_content); 
 // String content1=content.toString(); 
 String content = listview.getItemAtPosition(arg2) + ""; 
 String content1 = content.substring(content.indexOf("=") + 1, 
 content.indexOf(",")); 
 Log.d("CONTENT", content1); 
 Cursor c = dbread.query("note", null, 
 "content=" + "'" + content1 + "'", null, null, null, null); 
 while (c.moveToNext()) { 
 String No = c.getString(c.getColumnIndex("_id")); 
 Log.d("TEXT", No); 
 // Intent intent = new Intent(mContext, noteEdit.class); 
 // intent.putExtra("data", text); 
 // setResult(4, intent); 
 // // intent.putExtra("data",text); 
 // startActivityForResult(intent, 3); 
 Intent myIntent = new Intent(); 
 Bundle bundle = new Bundle(); 
 bundle.putString("info", content1); 
 noteEdit.id = Integer.parseInt(No); 
 myIntent.putExtras(bundle); 
 myIntent.setClass(MainActivity.this, noteEdit.class); 
 startActivityForResult(myIntent, 1); 
 } 
 
 } 
 
 @Override 
 //             ,      
 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
 // TODO Auto-generated method stub 
 super.onActivityResult(requestCode, resultCode, data); 
 if (requestCode == 1 && resultCode == 2) { 
 RefreshNotesList(); 
 } 
 } 
 
 //   listview             
 @Override 
 public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, 
 long arg3) { 
 final int n=arg2; 
 Builder builder = new AlertDialog.Builder(this); 
 builder.setTitle("     "); 
 builder.setMessage("     ?"); 
 builder.setPositiveButton("  ", new DialogInterface.OnClickListener() { 
 @Override 
 public void onClick(DialogInterface dialog, int which) { 
 String content = listview.getItemAtPosition(n) + ""; 
 String content1 = content.substring(content.indexOf("=") + 1, 
  content.indexOf(",")); 
 Cursor c = dbread.query("note", null, "content=" + "'" 
  + content1 + "'", null, null, null, null); 
 while (c.moveToNext()) { 
  String id = c.getString(c.getColumnIndex("_id")); 
  String sql_del = "update note set content='' where _id=" 
  + id; 
  dbread.execSQL(sql_del); 
  RefreshNotesList(); 
 } 
 } 
 }); 
 builder.setNegativeButton("  ", new DialogInterface.OnClickListener() { 
 @Override 
 public void onClick(DialogInterface dialog, int which) { 
 } 
 }); 
 builder.create(); 
 builder.show(); 
 return true; 
 } 
 
} 
6.두 번 째 점프 후 인터페이스의 Activity 를 작성 합 니 다.다음 과 같 습 니 다.

package com.example.datenote; 
 
import java.text.SimpleDateFormat; 
import java.util.Date; 
 
import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteStatement; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.Window; 
import android.view.WindowManager; 
import android.view.inputmethod.InputMethodManager; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
 
public class noteEdit extends Activity { 
 private TextView tv_date; 
 private EditText et_content; 
 private Button btn_ok; 
 private Button btn_cancel; 
 private NotesDB DB; 
 private SQLiteDatabase dbread; 
 public static int ENTER_STATE = 0; 
 public static String last_content; 
 public static int id; 
 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 // TODO Auto-generated method stub 
 super.onCreate(savedInstanceState); 
 //       
 requestWindowFeature(Window.FEATURE_NO_TITLE); 
 setContentView(R.layout.edit); 
 
 tv_date = (TextView) findViewById(R.id.tv_date); 
 Date date = new Date(); 
 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); 
 String dateString = sdf.format(date); 
 tv_date.setText(dateString); 
 
 et_content = (EditText) findViewById(R.id.et_content); 
 //           
 getWindow().setSoftInputMode( 
 WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 
 
 DB = new NotesDB(this); 
 dbread = DB.getReadableDatabase(); 
 
 Bundle myBundle = this.getIntent().getExtras(); 
 last_content = myBundle.getString("info"); 
 Log.d("LAST_CONTENT", last_content); 
 et_content.setText(last_content); 
 //           
 btn_ok = (Button) findViewById(R.id.btn_ok); 
 btn_ok.setOnClickListener(new OnClickListener() { 
 public void onClick(View arg0) { 
 //        
 String content = et_content.getText().toString(); 
 Log.d("LOG1", content); 
 //         
 Date date = new Date(); 
 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
 String dateNum = sdf.format(date); 
 String sql; 
 String sql_count = "SELECT COUNT(*) FROM note"; 
 SQLiteStatement statement = dbread.compileStatement(sql_count); 
 long count = statement.simpleQueryForLong(); 
 Log.d("COUNT", count + ""); 
 Log.d("ENTER_STATE", ENTER_STATE + ""); 
 //          
 if (ENTER_STATE == 0) { 
  if (!content.equals("")) { 
  sql = "insert into " + NotesDB.TABLE_NAME_NOTES 
  + " values(" + count + "," + "'" + content 
  + "'" + "," + "'" + dateNum + "')"; 
  Log.d("LOG", sql); 
  dbread.execSQL(sql); 
  } 
 } 
 //              
 else { 
  Log.d("    ", "      "); 
  String updatesql = "update note set content='" 
  + content + "' where _id=" + id; 
  dbread.execSQL(updatesql); 
  // et_content.setText(last_content); 
 } 
 Intent data = new Intent(); 
 setResult(2, data); 
 finish(); 
 } 
 }); 
 btn_cancel = (Button) findViewById(R.id.btn_cancel); 
 btn_cancel.setOnClickListener(new OnClickListener() { 
 public void onClick(View arg0) { 
 finish(); 
 } 
 }); 
 } 
 
 @Override 
 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
 // TODO Auto-generated method stub 
 super.onActivityResult(requestCode, resultCode, data); 
 // if (requestCode == 3 && resultCode == 4) { 
 // last_content=data.getStringExtra("data"); 
 // Log.d("LAST_STRAING", last_content+"gvg"); 
 // } 
 } 
} 
7.그 중에서 ListView 에 Onitem Longclicklistener 를 추가 하고 길 게 클릭 하면 dialog 대화 상자 가 나타 나 로그 파일 을 삭제 할 지 말 지 알려 줍 니 다.

public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, 
 long arg3) { 
 final int n=arg2; 
 Builder builder = new AlertDialog.Builder(this); 
 builder.setTitle("     "); 
 builder.setMessage("     ?"); 
 builder.setPositiveButton("  ", new DialogInterface.OnClickListener() { 
 @Override 
 public void onClick(DialogInterface dialog, int which) { 
 String content = listview.getItemAtPosition(n) + ""; 
 String content1 = content.substring(content.indexOf("=") + 1, 
  content.indexOf(",")); 
 Cursor c = dbread.query("note", null, "content=" + "'" 
  + content1 + "'", null, null, null, null); 
 while (c.moveToNext()) { 
  String id = c.getString(c.getColumnIndex("_id")); 
  String sql_del = "update note set content='' where _id=" 
  + id; 
  dbread.execSQL(sql_del); 
  RefreshNotesList(); 
 } 
 } 
 }); 
 builder.setNegativeButton("  ", new DialogInterface.OnClickListener() { 
 @Override 
 public void onClick(DialogInterface dialog, int which) { 
 } 
 }); 
 builder.create(); 
 builder.show(); 
 return true; 
 } 
마지막 으로 반환 값 을 true 로 설정 하지 않 으 면 OnItemClickListener 와 충돌 할 수 있 습 니 다.
장 클릭 삭제 효 과 를 첨부 합 니 다.

마지막 에 자신의 코드 를 첨부 하고 힘 들 게 쓴 것 입 니 다.자원 을 많이 받 지 않 으 시 죠?관심 있 는 것 은 다운로드 해 보 세 요.
다운로드
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기