gpt4 book ai didi

android - MenuItemCompat.setOnActionExpandListener 什么都不做

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:03:25 27 4
gpt4 key购买 nike

背景

我有一个正在使用我创建的特殊类初始化的 searchView,它被用于所有 Activity 和 fragment 。

问题

最近可能是支持库更新的缘故(也可能是之前没用过,记不太清了),抓不到searchView展开/折叠的事件。

正如我所发现的,即使我将 setSupportActionBar 与 Toolbar 实例一起使用,也会发生这种情况。

我尝试过的

我已经尝试使用下面的每一种方法,但都没有用:

  • MenuItemCompat.setOnActionExpandListener。
  • MenuItemCompat.setOnActionExpandListener 以及图标化 SearchView,如某些网站所建议的那样。
  • 在搜索菜单项本身上设置 OnActionExpandListener,但随后崩溃,因为在扩展 ActionBarActivity 时无法使用它。
  • SearchView.setOnCloseListener ,但这仅在我关闭它并且仅使用 UI 时有效(调用 collapseActionView 时不会被调用)。
  • 我还尝试过修改搜索菜单项的 XML 文件。

代码

这是我制作的辅助类:

SearchHolderCompat

public class SearchHolderCompat {
public MenuItem mSearchMenuItem;
public SearchView mSearchView;
private final Activity _context;

public SearchHolderCompat(final Activity context) {
_context = context;
}

public boolean isCurrentyExpanded() {
return mSearchMenuItem != null && MenuItemCompat.isActionViewExpanded(mSearchMenuItem);
}

public boolean hasQuery() {
return mSearchMenuItem != null && mSearchView != null && MenuItemCompat.isActionViewExpanded(mSearchMenuItem)
&& !TextUtils.isEmpty(mSearchView.getQuery());
}

public void addSearchItemAndInit(final Menu menu, final OnQueryTextListener onQueryTextListener,
final OnActionExpandListener onActionExpandListener) {
final MenuInflater menuInflater = _context.getMenuInflater();
menuInflater.inflate(R.menu.search_menu_item, menu);
init(menu.findItem(R.id.menuItem_search), onQueryTextListener, onActionExpandListener);
}

public void init(final MenuItem searchMenuItem, final OnQueryTextListener onQueryTextListener,
final OnActionExpandListener onActionExpandListener) {
this.mSearchMenuItem = searchMenuItem;
mSearchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem);
if (mSearchView == null) {
MenuItemCompat.setShowAsAction(searchMenuItem, MenuItemCompat.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW
| MenuItemCompat.SHOW_AS_ACTION_ALWAYS);
MenuItemCompat.setActionView(searchMenuItem, mSearchView = new SearchView(_context));
}
mSearchView.setQueryHint(_context.getString(R.string.search));
mSearchView.setOnQueryTextListener(onQueryTextListener);
MenuItemCompat.setOnActionExpandListener(searchMenuItem, onActionExpandListener);
}

}

MainActivity.java

public class MainActivity extends ActionBarActivity {
SearchHolderCompat mSearchHolder = new SearchHolderCompat(this);

@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

@Override
public boolean onCreateOptionsMenu(final Menu menu) {
mSearchHolder.addSearchItemAndInit(menu, new OnQueryTextListener() {

@Override
public boolean onQueryTextSubmit(final String arg0) {
android.util.Log.d("AppLog", "onQueryTextSubmit");
return false;
}

@Override
public boolean onQueryTextChange(final String queryText) {
android.util.Log.d("AppLog", "onQueryTextChange");
return true;
}
}, new OnActionExpandListener() {

@Override
public boolean onMenuItemActionExpand(final MenuItem arg0) {
android.util.Log.d("AppLog", "onMenuItemActionExpand");
return false;
}

@Override
public boolean onMenuItemActionCollapse(final MenuItem arg0) {
android.util.Log.d("AppLog", "onMenuItemActionCollapse");
return false;
}
});
return true;
}
}

search_menu_item.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto" >

<!-- search items -->
<item
android:id="@+id/menuItem_search"
android:icon="@drawable/ic_action_search"
android:title="@string/search"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="always"
tools:ignore="AlwaysShowAction"/>

</menu>

问题

处理 SearchView 和搜索菜单项的正确方法是什么(使用支持库)?

为什么“MenuItemCompat.setOnActionExpandListener”不起作用?

最佳答案

在寻找解决方案几个小时后,我实现了类似的东西。并为我工作。 (我想要展开和折叠事件无论如何)
.

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.menu_main, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);



if(searchItem != null)
{

SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
// use this method for search process
searchView.setOnSearchClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
//Search view is expanded
showSearchPage();
}
});
searchView.setOnCloseListener(new SearchView.OnCloseListener()
{
@Override
public boolean onClose()
{
//Search View is collapsed
hideSearchPage();
return false;
}
});
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener()
{

@Override
public boolean onQueryTextSubmit(String query)
{
// use this method when query submitted
Toast.makeText(MainActivity.this, query, Toast.LENGTH_SHORT).show();
return false;
}

@Override
public boolean onQueryTextChange(String newText)
{
// use this method for auto complete search process
Log.e("SearchValueIs",":"+newText);
return false;
}
});
}
return super.onCreateOptionsMenu(menu);
}


希望它能帮助某人...

关于android - MenuItemCompat.setOnActionExpandListener 什么都不做,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27469236/

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