当前位置: 代码迷 >> 综合 >> Android ListView 与 Activity 的 onTouchEvent 冲突
  详细解决方案

Android ListView 与 Activity 的 onTouchEvent 冲突

热度:96   发布时间:2023-10-18 01:38:56.0

在写一个聊天对话时,使用了listview,到了编辑输入时用onTouchEvent把软键盘收起,但是后来上网查了下才发现Android ListView 与 Activity 的 onTouchEvent 冲突

  private EditText edit;InputMethodManager manager;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);edit=  (EditText)findViewById(R.id.edit);manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);}@Overridepublic boolean onTouchEvent(MotionEvent event) {// TODO Auto-generated method stubif(event.getAction() == MotionEvent.ACTION_DOWN){if(getCurrentFocus()!=null && getCurrentFocus().getWindowToken()!=null){manager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);}}return super.onTouchEvent(event);}


因为ListView是的onTouchEvent 优先权高于Activity的,前者把后者覆盖了,于是造成Activity onTouchEvent失效。


所以更换成

 @Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {if(ev.getAction() == MotionEvent.ACTION_DOWN){if(getCurrentFocus()!=null && getCurrentFocus().getWindowToken()!=null){manager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);}}return super.dispatchTouchEvent(ev);}
就好了

点击键盘以外的地方就可以收起键盘



  相关解决方案