Android事件传递机制(二)

来源:互联网 发布:linux db2数据库名 编辑:程序博客网 时间:2024/06/16 13:19

本章节讲述几个view事件传递的例子


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。



0 0