2011年12月13日 星期二

有自動完成功能的EditText-AutoCompleteTextView

狀況:
一個有一串名字的清單(ListView)
因為太長 想找某個項目要一直滑動很麻煩

目的:
在畫面上方放一個搜尋用的edittext,打第一個字就跑出搜尋選項,
然後點下選項後跑到該項

XML:
使用AutoCompleteTextView,其他無特別之處

程式碼:
//前略
public class AutoText extends Activity {

//宣告要用的清單字串陣列
        String[] namelist;
//宣告AutoCompleteTextView
        AutoCompleteTextView myAutoCompleteTextView;
/*--------------------------*/
/*然後把資料丟到陣列裡*/
/*--------------------------*/

@Override
    public void onCreate(Bundle savedInstanceState) {
//清單建立
        ListView list = (ListView)findViewById(R.id.nameListView);
//中略



//快速搜尋
//把namelist丟到一個ArrayAdapter,android.R.layout.simple_dropdown_item_1line是內建的一行用xml
        ArrayAdapter<String> qsadapter = new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line,namelist);
//建立AutoCompleteTextView
        myAutoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.qstextview);
//把內容丟進去
        myAutoCompleteTextView.setAdapter(qsadapter);
//聚焦於第一行,不做這行也沒差
        myAutoCompleteTextView.setThreshold(1);



//快速搜尋點擊事件
     myAutoCompleteTextView.setOnItemClickListener(new OnItemClickListener(){ 
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
                    long arg3) {
             
             //搜尋namelist,取得選項位置
               //從頭迴圈到尾,若內容等於所點項目則聚焦到該項
              //這裡可能有更好的搜尋法
             for(int i=0;i<namelist.length;i++){
              if(myAutoCompleteTextView.getText().toString().equals(namelist[i].toString())==true){
               list.setSelection(i);
              }              
             }             
            } 
        });

沒有留言:

張貼留言