Android ListView搜索和焦点

Android ListView搜索和焦点,android,android-listview,Android,Android Listview,我有一个带有人名的列表视图和一个带有搜索小部件的操作栏。 我要做的是聚焦ListView中包含搜索查询作为子字符串的第一项 例如,如果我有一个名为“John Doe”的人,我搜索“hn D”,只要该行是第一个包含“hn D”作为子字符串的行,该行就应该被聚焦 请注意,我不希望从列表中删除不包含子字符串的项 我就是这样列出来的 活动\u main.xml <ListView android:id="@+id/list_view" android:layout_width="match

我有一个带有人名的列表视图和一个带有搜索小部件的操作栏。 我要做的是聚焦ListView中包含搜索查询作为子字符串的第一项

例如,如果我有一个名为“John Doe”的人,我搜索“hn D”,只要该行是第一个包含“hn D”作为子字符串的行,该行就应该被聚焦

请注意,我不希望从列表中删除不包含子字符串的项

我就是这样列出来的

活动\u main.xml

<ListView android:id="@+id/list_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
<TextView
    android:id="@+id/name"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dip"
    android:textSize="16sp"
    android:textStyle="bold" />

list_item.xml

<ListView android:id="@+id/list_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
<TextView
    android:id="@+id/name"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dip"
    android:textSize="16sp"
    android:textStyle="bold" />

MainActivity.java

String[] names = {"John Doe","Mark Marky","Donald Duck","Derp Derpson"};
lv = (ListView) findViewById(R.id.list_view);
adapter = new ArrayAdapter<String>(this,R.layout.list_item, R.id.name, names);
lv.setAdapter(adapter);
String[]name={“约翰·多伊”、“马克·马基”、“唐老鸭”、“德普·德普森”};
lv=(ListView)findViewById(R.id.list\u视图);
适配器=新阵列适配器(此,R.layout.list_项,R.id.name,name);
低压设置适配器(适配器);
我还有一个带有搜索小部件的操作栏,我实现了
onQueryTextChange()
onquerytexsubmit()
方法


问题是如何在这些方法中搜索列表,以及如何聚焦适当的列表项?

要进行文本搜索,可以在适配器中使用过滤器

public class Adapter extends BaseAdapter implements Filterable {

@Override
public Filter getFilter() {

    Filter filter = new Filter() {
        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            //do you work
            notifyDataSetChanged();
        }
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {

            FilterResults results = new FilterResults();
            List<Object> searchedList = new ArrayList<Object>();



            results.count = searchedList.size();
            results.values = searchedList;
            return results;
        }
    };
    return filter;
}

}

searchedittext.addTextChangedListener(新的TextWatcher(){


嗯,我不是很确定,但我认为您可以使用
String.contains()
String[]
的每个元素获取包含搜索的第一个元素的索引。如果您获得该索引,您可以使用
mListView.requestFocus();
mListView.setSelection(position);