android-如何在ActionBarSherlock中将“ setOnEditorActionListener”设置为EditText?
作者:互联网
我已使用此代码在ActionBarSherlock中放置可折叠视图(EditText):
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.activity_main, menu);
//Used to put dark icons on light action bar
boolean isLight = false;
menu.add("Search")
.setIcon(isLight ? R.drawable.ic_search_inverse : R.drawable.ic_search)
.setActionView(R.layout.collapsible_edittext)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
return true;
}
当我尝试在视图上通过其ID设置setOnEditorActionListener时,应用程序崩溃:
EditText editText = (EditText) findViewById(R.id.search);
editText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
performSearch(v.getText().toString(), 3);
return true;
}
return false;
}
});
我需要在ActionBar中具有SearchField并在用户按下键盘上的“搜索”键时执行搜索,但是我不知道如何将setOnEditorActionListener绑定到视图.
解决方法:
我假设R.id.search在您的R.layout.collapsible_edittext布局内?您在哪里调用findViewById()?例如,您是在onCreate()还是onResume()中调用它?您确定此时已创建菜单吗?
我建议将其包含在onCreateOptionsMenu()中.这样的事情可能会起作用:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.activity_main, menu);
boolean isLight = false;
int menuItemId =
menu.add("Search")
.setIcon(isLight ? R.drawable.ic_search_inverse : R.drawable.ic_search)
.setActionView(R.layout.collapsible_edittext)
.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS |
MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW)
.getItemId();
EditText editText =
(EditText) menu.findItem(menuItemId).getActionView().findViewById(R.id.search);
editText.setOnEditorActionListener(...);
}
另一个选择是在调用MenuItem.setActionView(actionView)之前,扩大视图并附加侦听器.
(顺便说一句,如果您希望人们确定崩溃原因,则包含异常和堆栈跟踪会很有帮助.)
标签:actionbarsherlock,android 来源: https://codeday.me/bug/20191127/2075466.html