zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    8天学通MongoDB——第五天 主从复制
    5天不再惧怕多线程——第五天 线程池
    8天玩转并行开发——第四天 同步机制(上)
    8天学通MongoDB——第八天 驱动实践
    8天玩转并行开发——第三天 plinq的使用
    8天玩转并行开发——第一天 Parallel的使用
    8天玩转并行开发——第五天 同步机制(下)
    5天不再惧怕多线程——第一天 尝试Thread
    虚函数、纯虚函数详解
    libevent 笔记
  • 原文地址:https://www.cnblogs.com/vus520/p/2652145.html
Copyright © 2011-2022 走看看