具有搜索功能的Android列表视图

时间:2011-03-07 13:58:42

标签: android

我的动态列表视图(从webservice填充)有一个AutoCompleteTextView,“搜索”按钮。

我已经为AutoCompleteTextView实现了自动完成功能,它运行正常;当我键入min 2chars时,AutoCompleteTextView显示匹配的结果,当我从填充列表中选择一个项目时,它会自动出现在AutoCompleteTextView中。

没关系,现在我需要为我的“搜索”按钮实现操作,当我点击这个按钮时,主列表视图应该只显示匹配的结果。

如果不再次调用Web服务,最好的方法是什么?

提前致谢。 -nehatha

2 个答案:

答案 0 :(得分:4)

最好的Android方式是使用Quick Search Box。基本上,您实现了一个提供程序,以便在游标中返回搜索结果。该光标将用作显示项目列表的源。您可以自定义用户单击项目时要执行的操作。

答案 1 :(得分: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>