android EditText+ListView的组合(类似于AutoCompleteTextView)

很好的帖子:

eoeWiki客户端(android版)1.0.0版正式发布~
http://www.eoeandroid.com/thread-194188-1-1.html

Android定时自动启动应用程序应用教程
http://www.eoeandroid.com/thread-194271-1-1.html

基于Android 随手记
http://www.eoeandroid.com/thread-194031-1-1.html

 

因为问这个问题的人很多,所以刚刚找了下代码,结果还手动的把他提取出来。好了废话不多说了。直接上代码。

package ki.test.edit_list;     import java.io.File;  import java.io.FileOutputStream;  import java.io.IOException;  import java.io.InputStream;     import android.content.Context;  import android.database.sqlite.SQLiteDatabase;  import android.os.Environment;     public class DBManager {          private final int BUFFER_SIZE = 40000;          public static final String DB_NAME = "city.db"; // 保存的数据库文件名          public static final String PACKAGE_NAME = "ki.test.edit_list";          public static final String DB_PATH = "/data"                          + Environment.getDataDirectory().getAbsolutePath() + "/"                          + PACKAGE_NAME; // 在手机里存放数据库的位置             private SQLiteDatabase database;          private Context context;             public DBManager(Context context) {                  this.context = context;          }             SQLiteDatabase db = null;             public SQLiteDatabase getDatabase(){                  try {                          openDatabase();                  } catch (IOException e) {                          // TODO Auto-generated catch block                          e.printStackTrace();                  }                  return db;          }                     private void openDatabase() throws IOException {                  String dbfile = DB_PATH + "/" + DB_NAME;                     if (!(new File(dbfile).exists())) {// 判断数据库文件是否存在,若不存在则执行导入,否则直接打开数据库                          InputStream is = this.context.getResources().openRawResource(                                          R.raw.city); // 欲导入的数据库                          FileOutputStream fos = new FileOutputStream(dbfile);                          byte[] buffer = new byte[BUFFER_SIZE];                          int count = 0;                          while ((count = is.read(buffer)) > 0) {                                  fos.write(buffer, 0, count);                          }                          fos.close();                          is.close();                  }                     db = SQLiteDatabase.openDatabase(dbfile, null,                                  SQLiteDatabase.OPEN_READWRITE);          }             public void closeDatabase() {                  this.database.close();          }                        }
package ki.test.edit_list;     import java.util.ArrayList;  import java.util.HashMap;  import java.util.List;  import java.util.Map;     import android.app.Activity;  import android.content.SharedPreferences;  import android.database.Cursor;  import android.database.sqlite.SQLiteDatabase;  import android.os.Bundle;  import android.text.Editable;  import android.text.TextWatcher;  import android.util.Log;  import android.view.View;  import android.widget.*;  import android.widget.AdapterView.OnItemClickListener;  import android.widget.AdapterView.OnItemSelectedListener;     public class SearchCity extends Activity implements OnItemClickListener, TextWatcher {             public static List<Map<String, String>> City_Lists = new ArrayList<Map<String, String>>();             private List<Map<String, String>> defaultLists = new ArrayList<Map<String, String>>();                     private List<Map<String, String>> lists = new ArrayList<Map<String, String>>();                private final String NAME = "name";          private final String PARENT_NAME = "parent_name";                        // sql 语句          private final String sql_Head = "select b.name , a.name from city a inner join (select _id ,name from city) b on a.parent_id = b._id where dtype = 'area' and a.name like '";          private String str_Sql = "";          private final String sql_Foot = "%'";             private EditText edit_search_city;          private SQLiteDatabase db;          private Cursor result;          private SearchCity city = this;          private ListView listView;             @Override          protected void onCreate(Bundle savedInstanceState) {                  // TODO Auto-generated method stub                  super.onCreate(savedInstanceState);                  setContentView(R.layout.search);                     initControl();                  initDefaultLists();                  listView.setOnItemClickListener(this);                     edit_search_city.addTextChangedListener(this);             }             void initControl() {                  edit_search_city = (EditText) findViewById(R.id.edit_search);                  listView = (ListView) findViewById(R.id.listview);          }             private void initDefaultLists() {                  Map<String, String> map = new HashMap<String, String>();                  map.put(NAME, getString(R.string.nocity));                  defaultLists.add(map);          }             public boolean getLists(String edit_content) {                  str_Sql = sql_Head + edit_content + sql_Foot;                  db = new DBManager(city).getDatabase();                  result = db.rawQuery(str_Sql, null);                  if (result.moveToFirst()) {                          while (!result.isAfterLast()) {                                  Map<String, String> map = new HashMap<String, String>();                                  String name = result.getString(1);                                  String parent_name = result.getString(0);                                  if (name.equals(parent_name))                                          parent_name = "";                                  map.put(NAME, name);                                  map.put(PARENT_NAME, parent_name);                                  lists.add(map);                                  result.moveToNext();                          }                          City_Lists = lists;                          result.close();                          db.close();                          return true;                  }                  db.close();                  return false;          }             @Override          public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                  String put_Content = City_Lists.get(position).get(NAME);                  Toast.makeText(getApplicationContext(), put_Content, 8000).show();          }             @Override          public void beforeTextChanged(CharSequence s, int start, int count, int after) {             }             @Override          public void onTextChanged(CharSequence s, int start, int before, int count) {                  lists.clear();                  String edit_content = edit_search_city.getText().toString();                  if (edit_content.equals("")) {                          return;                  }                  List<Map<String, String>> dataLists = null;                  dataLists =  getLists(edit_content) ? lists : defaultLists;                  ListAdapter adapter = new SimpleAdapter(city, dataLists, R.layout.listview, new String[] { NAME, PARENT_NAME }, new int[] { R.id.txt_list_1, R.id.txt_list_2 });                  listView.setAdapter(adapter);          }             @Override          public void afterTextChanged(Editable s) {             }  }
package ki.test.edit_list;     import android.app.Activity;  import android.content.Intent;  import android.os.Bundle;     public class TestDemoActivity extends Activity {          /** Called when the activity is first created. */          @Override          public void onCreate(Bundle savedInstanceState) {                  super.onCreate(savedInstanceState);                  setContentView(R.layout.main);                     startActivity(new Intent(getApplicationContext(), SearchCity.class));          }  }
<?xml version="1.0" encoding="utf-8"?>  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"      android:layout_width="fill_parent"      android:layout_height="55px"      android:orientation="horizontal" >         <TextView          android:id="@+id/txt_list_1"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_marginLeft="8px"          android:layout_marginRight="10px"          android:textColor="#FFFFFF"          android:textSize="30px" />         <TextView          android:layout_width="20px"          android:layout_height="wrap_content"          android:layout_marginRight="5px"          android:text="--"          android:textSize="20px" />         <TextView          android:id="@+id/txt_list_2"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:textSize="25px" />     </LinearLayout>
<?xml version="1.0" encoding="utf-8"?>  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"      android:layout_width="400px"      android:layout_height="500px"      android:orientation="vertical" >         <LinearLayout          android:layout_width="fill_parent"          android:layout_height="2px"          android:background="#CCCCCC"          android:layout_marginBottom="5px" />         <EditText          android:id="@+id/edit_search"          android:layout_width="350px"          android:layout_height="wrap_content"          android:hint="Enter the city"/>         <LinearLayout          android:layout_width="fill_parent"          android:layout_height="2px"          android:background="#CCCCCC"          android:layout_marginBottom="5px" />            <LinearLayout         android:id="@+id/linear_list"         android:layout_width="match_parent"         android:layout_height="match_parent">         <ListView             android:id="@+id/listview"             android:layout_width="wrap_content"             android:layout_height="wrap_content"></ListView>               </LinearLayout>     </LinearLayout>
<?xml version="1.0" encoding="utf-8"?>  <resources>         <string name="hello">Hello World, TestDemoActivity!</string>      <string name="app_name">设置城市</string>      <string name="nocity">没有找到你想查询的城市</string>     </resources>

其中由于是刚刚急着赶出来的 所以可能代码有些乱,但是主要看思路,另外我把源码 也上传了下。有不足地方请见晾。

 

 源码下载:TestDemo.rar

你可能感兴趣的:(Android开发,移动开发)