我正在尝试使用带有 *** 作栏sherlock的SearchVIEw支持v4版本.
所以我在 *** 作栏中有我的搜索按钮 – >当我触摸它时键盘显示和搜索栏也.
我的问题是我需要使用侦听器onqueryTextsubmit和onqueryTextChange但它们永远不会被触发.我需要使用searh查询字符串并使用它做自定义的东西.
这是完整的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.
您将侦听器设置为您在屏幕上看到的不同SearchVIEw.
此外,每次调用onPrepareOptionsMenu时,都会创建新的SearchVIEw,因此它没有设置侦听器.
尝试像这样做onPrepareOptionsMenu:
@OverrIDepublic 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);}
并删除重写的方法
@OverrIDepublic boolean onCreateOptionsMenu(Menu menu) { }
总结 以上是内存溢出为你收集整理的java – 使用SearchView的Android abs,onQueryTextListener无效全部内容,希望文章能够帮你解决java – 使用SearchView的Android abs,onQueryTextListener无效所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)