2011-03-07 97 views
3

我的动态列表视图(从web服务填充)具有AutoCompleteTextView,“搜索”按钮。Android的列表视图

我已经实现自动完成功能的AutoCompleteTextView,它工作正常;当i型分钟2chars,所述AutoCompleteTextView正在显示匹配的结果,当我从所填充的列表中选择一个项目,则自动在AutoCompleteTextView出现。

这很好,现在我需要实施的行动对我的“搜索”按钮,当我点击这个按钮,主列表视图应该只显示匹配结果。

什么是做到这一点的最好办法,而不会再次调用web服务?

在此先感谢。 -nehatha

回答

4

最好的Andr oid办法做到这一点是使用Quick Search Box。基本上你实现了一个提供者来返回一个游标的搜索结果。该光标将用作显示项目列表的来源。而且您可以自定义用户点击该项目时要完成的操作。

+0

谢谢。能否请您提供的资源与源代码简单的例子.. – 2011-03-09 13:57:08

+1

见SearchableDictionary示例源代码:http://developer.android.com/resources/samples/SearchableDictionary/index.html – 2011-03-09 13:59:10

+0

谢谢马文 – 2011-03-11 18:21:29

0

这是我的解决方案与点击事件,并会详细显示

public class GinActivityList extends Activity { 

    private ListView lv; 
    private EditText et; 
    private ArrayList<Object> array_sort = new ArrayList<Object>(); 
    int textlength = 0; 
    private Object[] ginsArray; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     ginsArray = (Object[]) General.GINS.values().toArray(); 
     setContentView(R.layout.list_search); 

     lv = (ListView) findViewById(R.id.ListView01); 
     et = (EditText) findViewById(R.id.EditText01); 

     lv.setAdapter(new ArrayAdapter<Object>(this, 
      android.R.layout.simple_list_item_1, ginsArray)); 

     lv.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 

       Gin ginSelected = (Gin) lv.getAdapter().getItem(position); 

       Intent intent = new Intent(getParent(), GinActivityDetail.class); 
       GinActivityGroup parentActivity = (GinActivityGroup) getParent(); 

       Bundle bundle = new Bundle(); 
       bundle.putSerializable("ID_GIN", ginSelected.getId()); 
       intent.putExtras(bundle); 

       parentActivity.startChildActivity("GinActivityDetail", intent); 
      } 
     }); 

     et.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, 
       int count) { 

      textlength = et.getText().length(); 
      array_sort.clear(); 
      for (int i = 0; i < ginsArray.length; i++) { 
       if (textlength <= ((Gin) ginsArray[i]).getName().length()) { 
        if (et.getText() 
          .toString() 
          .equalsIgnoreCase(
            (String) ((Gin) ginsArray[i]).getName() 
              .subSequence(0, textlength))) { 
         array_sort.add((Gin) ginsArray[i]); 
        } 
       } 
      } 
      lv.setAdapter(new ArrayAdapter<Object>(GinActivityList.this, 
        android.R.layout.simple_list_item_1, array_sort)); 

     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 
     } 
    }); 
} 

} 

list_search.xml

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/LinearLayout01" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

<EditText 
    android:id="@+id/EditText01" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:hint="Buscar" > 
</EditText> 

<ListView 
    android:id="@+id/ListView01" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:padding="10dp" 
    android:textSize="12sp" > 
</ListView>