9

在我的应用程序中,我有一个带有列表视图和搜索栏的视图,可以在列表视图中搜索。当您点击搜索栏时,它会获得焦点并且软键盘会出现。当我触摸列表视图时,键盘停留在列表视图的顶部,因此我看不到很多列表视图。

我的问题:我如何知道列表视图是否已被触摸/滚动/...以及如何删除软键盘并从编辑文本中删除焦点?

4

4 回答 4

17

基于@androidnoob 的回答,我在这里(对于其他有此特定问题的人)发布所需的完整代码。

list.setOnScrollListener(new OnScrollListener() {
     public void onScrollStateChanged(AbsListView view, int scrollState) {
             //hide KB
             InputMethodManager imm =  (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
             imm.hideSoftInputFromWindow(colleagueSearch.getWindowToken(), 0);
            }

            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { }
   });
于 2013-01-10T09:15:08.130 回答
3

看一下这个问题以了解如何关闭键盘,至于知道列表视图是否已滚动,您可以扩展列表视图类并覆盖 onScrollChanged() 方法,并在与滚动交互时做任何您想做的事情

编辑:实际上有一个OnScrollListener来监听列表视图中的滚动变化

于 2012-04-25T14:37:07.097 回答
0

yourListView.setOnScrollListener(new AbsListView.OnScrollListener() {

        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
            if (scrollState != 0){

                InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(yourEditText.getWindowToken(), 0);

            }
        }
        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

        }
    });
于 2014-06-10T11:16:13.870 回答
0

@Dr.Luiji 回答有效,但我认为最好在用户触摸listView 后立即隐藏软键。

    myListView.setOnFocusChangeListener(new OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (hasFocus) {
                InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(((Activity) mContext).getCurrentFocus().getWindowToken(), 0);
            }
        }
    });
于 2018-11-17T09:15:11.143 回答