Android 간이 수첩 구현

16611 단어 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 메모 장 앱 구현
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기