Android 事件传递机制举例说明

xiaoxiao2021-02-27  148

本章节举几个我们在开发中经常用到的例子说明Android事件传递机制。

 

例1

listview的setOnItemClickListener和setOnItemLongClickListener

//点击事件 listview.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { Log.d("PositionTabActivity", "item点击事件!!!!!!!!!!!!"); } }); //长按事件 listview.setOnItemLongClickListener(new OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { Log.d("PositionTabActivity", "item长按事件!!!!!!!!!!!!"); return false; } });

 

 

 

可以看到长按事件重写的方法是有返回值的返回值类型 boolean

返回false

点击效果

 

长按效果

也就是说此条件下长按事件结束后(长按item抬起后)还执行了点击事件。

 

 

返回true

点击效果

长按效果

也就是说此条件下长按事件结束后(长按item抬起后)没有执行点击事件。

 

总结:listview item点击事件和长按事件都有的情况下(比如item点击进入详情页 item长按删除 两者功能不一样所以要写两个)

当长按事件返回false时不仅执行长按监听还执行了点击监听。

当长按事件返回true时只执行长按监听。

 

 

 

例2

Tabhost多个页面

当返回操作要在主activity中操作

 

主activity onKeyDown方法

@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode==KeyEvent.KEYCODE_BACK){ if((System.currentTimeMillis()-mExitTime)>2000){ toast.showToast("再按一次退出!"); mExitTime=System.currentTimeMillis(); }else{ finish(); } return false; } return super.onKeyDown(keyCode, event); }

 

 

 

 

其中一个页面onKeyDown方法

@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { return false; } return super.onKeyDown(keyCode, event); }

 

 

 

效果:

 

此时在子activity中(上图中选中的页面)可以退出app。

 

要是其中一个页面onKeyDown方法

@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { return true; } return super.onKeyDown(keyCode, event); }

 

 

 

此时在子activity中(上图中选中的页面)退出app时没有反应。

 

总结:Tabhost时 所有子activity的onKeyDown方法都必须 return false; 此时才可以在所有子activity中退出APP。

 

 

转载请注明原文地址: https://www.6miu.com/read-15358.html

最新回复(0)