gpt4 book ai didi

java - 带有 SearchView 的 Android abs,onQueryTextListener 不工作

转载 作者:太空宇宙 更新时间:2023-11-03 11:50:43 24 4
gpt4 key购买 nike

我正在尝试将 SearchView Support v4 版本与操作栏 sherlock 一起使用。

所以我在操作栏中有我的搜索按钮 -> 当我触摸它时,键盘和搜索栏也会出现。

我的问题是我需要使用 onQueryTextSubmit 和 onQueryTextChange 监听器,但它们从未被触发。我需要使用 searchh 查询字符串并用它做一些自定义的事情。

这是完整的 activity.java

public class ActivityMain extends SherlockFragmentActivity implements OnQueryTextListener, DialogFragmentListener {
/**
* PRIVATE ATTRIBUTES
*/
private static final String TAG = "ActivityMain";
private ViewPager _viewPager;
private TabsAdapter _tabsAdapter;
private DialogFiltre _dialogFiltre;
private String _searchCurrentQuery;
// data
private boolean _doubleBackToExitPressedOnce = false;


@Override
public boolean onPrepareOptionsMenu(Menu menu) {

menu.clear();
switch ((int) _viewPager.getCurrentItem()) {
case 0:
getSupportMenuInflater().inflate(R.menu.empty_menu, menu);
break;
case 1:
getSupportMenuInflater().inflate(R.menu.action_bar_menu, menu);
break;
case 2:
getSupportMenuInflater().inflate(R.menu.empty_menu, menu);
break;
}
return super.onPrepareOptionsMenu(menu);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

getSupportMenuInflater().inflate(R.menu.action_bar_menu, menu);
MenuItem searchItem = menu.findItem(R.id.search);
SearchView searchView = (SearchView) searchItem.getActionView();
searchView.setSubmitButtonEnabled(true);
searchView.setOnQueryTextListener(queryTextListener);
return true;
}

@Override
public boolean onQueryTextSubmit(String query) {

Log.i(TAG, "onQueryTextSubmit--");
onSearchClicked(query);
// hide keyboard
InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
return false;
}

@Override
public boolean onQueryTextChange(String newText) {

Log.d(TAG, "onQueryTextChange--");
_searchCurrentQuery = newText.toString();
EtablissementApplication._adapter.getFilter().filter(_searchCurrentQuery);
return true;
}

private void onSearchClicked(String query) {

Log.d(TAG, "onSearchClicked--");
_searchCurrentQuery = query.toString();
EtablissementApplication._adapter.getFilter().filter(_searchCurrentQuery);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()) {
case android.R.id.home:
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
break;
case R.id.search:
break;
case R.id.menu_filtre:
_dialogFiltre = DialogFiltre.newInstance(R.string.menu_filtre, this);
_dialogFiltre.setValidDialogListener(this);
_dialogFiltre.show(getSupportFragmentManager(), null);
break;
}
return super.onOptionsItemSelected(item);
}

最佳答案

您正在尝试使用新的 SearchView,而不是使用 SupportMenuInflater 创建的那个。您将监听器设置为您在屏幕上看到的不同 SearchView。此外,每次调用 onPrepareOptionsMenu 时,都会创建新的 SearchView,因此它没有设置监听器。

尝试像这样执行 onPrepareOptionsMenu:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {

menu.clear();
switch ((int) _viewPager.getCurrentItem()) {
case 0:
getSupportMenuInflater().inflate(R.menu.empty_menu, menu);
break;
case 1:
getSupportMenuInflater().inflate(R.menu.action_bar_menu, menu);
MenuItem searchItem = menu.findItem(R.id.search);
SearchView searchView = (SearchView) searchItem.getActionView();
searchView.setSubmitButtonEnabled(true);
searchView.setOnQueryTextListener(queryTextListener);
break;
case 2:
getSupportMenuInflater().inflate(R.menu.empty_menu, menu);
break;
}
return super.onPrepareOptionsMenu(menu);
}

并移除重写的方法

@Override
public boolean onCreateOptionsMenu(Menu menu) { }

关于java - 带有 SearchView 的 Android abs,onQueryTextListener 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16854212/

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