gpt4 book ai didi

Android actionbar 使用 ListView 搜索

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:43:36 24 4
gpt4 key购买 nike

我是 android 开发的新手。我想要的是使用操作栏搜索 View 小部件在我的 ListView 上进行搜索。我如何实现搜索功能。我缺少的是这个的搜索功能。我看到了一些搜索功能,但它是基于 editText 的。请帮忙。

这是我的代码:

菜单.xml

   <item android:id="@+id/menu_search"
android:title="@string/menu_search"
android:icon="@android:drawable/ic_menu_search"
android:showAsAction="ifRoom|collapseActionView"
android:actionViewClass="android.widget.SearchView" />

在我的 manifest.xml 中

<activity
android:name=".MainActivity"
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable">
</meta-data>
</activity>

在我的 MainActivity.java 上

  protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

this.lv = (ListView) findViewById(R.id.listView);

this.databaseAccess = DatabaseAccess.getInstance(getApplicationContext());
this.persons= getPersonList();

Adapter adapter = new Adapter(this, persons);
this.lv.setAdapter(adapter);
}
public List<Person> getPersonList(){
databaseAccess.open();
List<Person> person= databaseAccess.getPersons();
databaseAccess.close();
return person;
}

private class Adapter extends ArrayAdapter<Person> {

public Adapter(Context context, List<Person> objects) {
super(context, 0, objects);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = getLayoutInflater().inflate(R.layout.persons, parent, false);
}

TextView id = (TextView) convertView.findViewById(R.id.id);
TextView name= (TextView) convertView.findViewById(R.id.name);
TextView lastname = (TextView) convertView.findViewById(R.id.latname);

Person p = persons.get(position);
id.setText(p.getId());
name.setText(p.getName());
lastname.setText(p.getLastName());

return convertView;
}

最佳答案

您需要实现 Filterable适配器中的接口(interface)。

然后展开菜单:

  @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
MenuItem searchMenuItem = menu.findItem(R.id.menu_search);
if (searchMenuItem == null) {
return;
}

searchView = (SearchView) searchMenuItem.getActionView();
if (searchView != null) {
searchView.setQueryHint(getString(R.string.search_hint));
searchView.setMaxWidth(2129960); // https://stackoverflow.com/questions/18063103/searchview-in-optionsmenu-not-full-width
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
return false;
}

@Override
public boolean onQueryTextChange(String s) {
SearchFragment.this.onQueryTextChange(s);
return false;
}
});
}
}

然后指定处理查询文本更改事件的方法,例如:

void onQueryTextChange(String query) {
searchAdapter.getFilter().filter(query);
}

查找更多信息 here

关于Android actionbar 使用 ListView 搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31943221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com