Android AutoComplete TextView 데이터베이스 연결 자동 알림 방법(데모 원본 다운로드 첨부)

이 사례 는 Android AutoComplete TextView 가 데이터 베 이 스 를 연결 하여 자동 으로 제시 하 는 방법 을 설명 한다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
이 간단 한 예 도 MVC 의 사상 을 나타 낸다.AutoComplete TextView 는 View 이 고 Simple Cursor Adapter 는 Controller 이 며 SQLiteOpenHelper 는 Model 에 해당 합 니 다.
1.먼저 MVC 의 Model 을 정의 하고 DBHelper 류 를 사용자 정의 하여 SQLiteOpenHelper 를 계승 하여 데이터 베 이 스 를 방문 하 는 데 사용 합 니 다.

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
 *
 * @author lai_zs
 * @date:2012-2-16   4:16:02
 */
public class DBHelper extends SQLiteOpenHelper {
  private static final int DATABASE_VERSION = 1;
  private static final String DATABASE_NAME = "autoComplete.db";
  //   name    
  public static final String NAME = "name";
  public DBHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
  }
  @Override
  public void onCreate(SQLiteDatabase db) {
    String sqlString = "createtable test (_id integer primary key autoincrement,name varchat(20) not null onconflict fail)";
    db.execSQL(sqlString);
    //       
    String[] nameStrArrayStr = new String[] { "aaa", "abc", "cde", "  ", "  ", "  " };
    for (int i = 0; i < nameStrArrayStr.length; i++) {
      db.execSQL("INSERT INTOtest(" + NAME + ")values(?)",new Object[] { nameStrArrayStr[i] });
    }
  }
  @Override
  public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
    // do nothing here
  }
  /**
   *           
   * @param name
   * @return
   */
  public Cursor query(String name) {
    SQLiteDatabase db = this.getReadableDatabase();
    return db.rawQuery("select* from test where name like '%" + name + "%' limit 10",null);
  }
}

2,정의 AutoComplete Adater 계승 SimpleCursorAdapter 제어 데이터 상호작용

import android.content.Context;
import android.database.Cursor;
import android.widget.SimpleCursorAdapter;
/**
 *
 * @author lai_zs
 * @date:2012-2-16   3:49:25
 */
public class AutoCompleteAdater extends SimpleCursorAdapter {
  private DBHelper dbHelper = null;
  private Context context;
  //     
  private String queryField;
  public AutoCompleteAdater(Context context, int layout, Cursor c,String from, int to) {
    super(context, layout, c, new String[] { from },new int[] { to });
    this.context = context;
    this.queryField = from;
  }
  /**
   *        
   */
  @Override
  public Cursor runQueryOnBackgroundThread(CharSequenceconstraint) {
    if (constraint != null) {
      return getDbHelper().query((String) constraint);
    } else {
      return null;
    }
  }
  /**
   *                        ,            
   */
  @Override
  public CharSequence convertToString(Cursor cursor) {
    return cursor.getString(cursor.getColumnIndex(queryField));
  }
  public DBHelper getDbHelper() {
    if (dbHelper == null) {
      dbHelper = new DBHelper(this.context);
    }
    return dbHelper;
  }
}

3.최종 정의 View

<AutoCompleteTextView
    android:id="@+id/autoCompleteTextView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text=""
    android:hint="@string/dbAutoComlete" >
    <requestFocus />
</AutoCompleteTextView>

4.Activity 에서 View 와 Adapter 관련

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    AutoCompleteAdatercursorAdapter = new AutoCompleteAdater(this, android.R.layout.simple_dropdown_item_1line,null, DBHelper.NAME, android.R.id.text1);
    //                (              )
    ((AutoCompleteTextView) this.findViewById(R.id.autoCompleteTextView1)).setThreshold(1);
    ((AutoCompleteTextView) this.findViewById(R.id.autoCompleteTextView1)).setAdapter(cursorAdapter);
}


전체 인 스 턴 스 코드 는 여 기 를 클릭 하 십시오본 사이트 다운로드
더 많은 안 드 로 이 드 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 고 에서 말 한 것 이 여러분 의 안 드 로 이 드 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기