带搜索功能的Android列表视图

3

我的动态列表视图(由Web服务填充)具有自动完成文本视图和“搜索”按钮。

我已经为AutoCompleteTextView实现了自动完成功能,并且它正常工作;当我输入至少2个字符时,AutoCompleteTextView会显示匹配的结果,当我从填充的列表中选择一个项目时,它会自动出现在AutoCompleteTextView中。

这很好,现在我需要为我的“搜索”按钮实现操作,当我单击此按钮时,主列表视图应仅显示匹配的结果。

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

提前致谢。 -nehatha

2个回答

4

在Android中,最好的方法是使用快速搜索框。基本上,您需要实现一个提供程序来返回光标中的搜索结果。该光标将用作显示项目列表的源。您还可以自定义用户单击项目时要执行的操作。


谢谢。您能否提供一个带有源代码的简单示例资源? - Venkat Papana
1
请查看SearchableDictionary示例源代码:http://developer.android.com/resources/samples/SearchableDictionary/index.html - Vincent Mimoun-Prat

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>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接