Android SearchView onclick
我有一个如下所示的searchView:Android SearchView onclick,android,onclick,searchview,Android,Onclick,Searchview,我有一个如下所示的searchView: private void setupSearchView() { mSearchView = (SearchView) getActivity().findViewById( R.id.search_view_neue); setSearchViewBackground(); mSearchView.setOnClickListener(this); mSearchView.setOnQueryTe
private void setupSearchView() {
mSearchView = (SearchView) getActivity().findViewById(
R.id.search_view_neue);
setSearchViewBackground();
mSearchView.setOnClickListener(this);
mSearchView.setOnQueryTextListener(this);
}
public boolean onQueryTextSubmit(String query) {
searchcounter = searchcounter + 1;
setSearchViewBackground();
ArrayList<WissensdokumenteRecord> documents = settingListContent(new ArrayList<WissensdokumenteRecord>());
setListAdapter(new NeueWissensdokumentItemAdapter(
inflater.getContext(), R.layout.row_example, documents));
InputMethodManager im = (InputMethodManager) getActivity()
.getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(getActivity().getCurrentFocus()
.getWindowToken(), 0);
return false;
}
<SearchView
android:id="@+id/search_view_neue"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_marginLeft="40dp"
android:layout_marginRight="40dp"
android:background="@drawable/border_searchview"
android:maxWidth="540dp"
android:queryHint="Neue Dokumente suchen" >
</SearchView>
private void setupSearchView(){
mSearchView=(SearchView)getActivity().findViewById(
R.id.search\u view\u neue);
setSearchViewBackground();
mSearchView.setOnClickListener(此);
mSearchView.setOnQueryTextListener(此);
}
公共布尔值onQueryTextSubmit(字符串查询){
searchcounter=searchcounter+1;
setSearchViewBackground();
ArrayList documents=settingListContent(新的ArrayList());
setListAdapter(新的NeueWissensdokumentItemAdapter(
filter.getContext(),R.layout.row_示例,documents));
InputMethodManager im=(InputMethodManager)getActivity()
.getSystemService(Context.INPUT\u方法\u服务);
im.hideSoftInputFromWindow(getActivity().getCurrentFocus())
.getWindowToken(),0);
返回false;
}
因此,搜索视图的行为是,通过单击搜索按钮打开键盘。现在我可以找东西了。是否可以通过单击searchview中的任意位置进行搜索?有人给我举个例子吗?我不明白为什么需要设置OnClickListener。 通过单击SearchView,您将更新文本光标。要执行搜索,您需要键盘输入法操作。如果单击它将执行搜索,则不可能更改光标等。在文本字段中进行焦点/更新光标以外的操作通常是错误的 据我记忆所及,您不需要在OnQueryTextListener中隐藏键盘。它应该自动亮起。在OnQueryTextSubmit中处理搜索
我通过以下方式做到了这一点: 在单击listener时设置搜索视图
mSearchView.setOnClickListener(this);
捕获onClick事件:
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.searchView:
mSearchView.onActionViewExpanded();
break;
}
}
通过这种方式,如果您单击搜索栏上的antwhere,键盘和搜索将被激活。我必须建议使用
setOnSearchClickListener
listner来检测SearchView
根据安卓系统进行单击:
设置搜索单击侦听器
void setOnSearchClickListener(View.OnClickListener listener)
设置在按下搜索按钮时通知的侦听器
这正是你想要达到的。
setIconified(false)
将在SearchView的这一端保留十字图标,这样用户仍然可以像单击放大镜一样取消
searchView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
searchView.setIconified(false);
}
});
一个搜索小部件,截取其子项上的所有触碰,并在触碰时进行回调:
class InterceptTouchSearchView(context: Context, attrs: AttributeSet) : SearchView(context, attrs) {
var onActionDownIntercepted: (() -> (Unit))? = null
override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean {
return true
}
@SuppressLint("ClickableViewAccessibility")
override fun onTouchEvent(ev: MotionEvent?): Boolean {
if (ev?.action == MotionEvent.ACTION_DOWN) {
onActionDownIntercepted?.invoke()
}
return false
}
}
用法:search\u view.onActionDownIntercepted={onSearchFieldClicked()}
答案很好
class InterceptTouchSearchView(context: Context, attrs: AttributeSet) : SearchView(context, attrs) {
var onActionDownIntercepted: (() -> (Unit))? = null
override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean {
return true
}
@SuppressLint("ClickableViewAccessibility")
override fun onTouchEvent(ev: MotionEvent?): Boolean {
if (ev?.action == MotionEvent.ACTION_DOWN) {
onActionDownIntercepted?.invoke()
}
return false
}
}