基于监听的实践处理机制
实现监听事件的方法
private class OnClick implements View.OnClickListener{
@Override
public void onClick(View v) {
Intent intent = null;
switch (v.getId())
{
case R.id.imageButton_search:
//goto FaceSetActivity
intent = new Intent(MainActivity.this,FaceSetActivity.class);
break;
}
startActivity(intent);
}
}
SearchImageBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//do somethintg
}
});
声明类时继承
public class XXX extends XXX implements View.OnClickListener {
......
}
在类中实现函数
@Override
public void onClick(View v) {
switch (v.getId()) {
//do something...
}
}
设置监听器
mBtn.setOnClickListener(this);
- 通过外部类实现
- 布局文件中onClick属性(针对点击事件)
基于回调的事件处理机制
监听事件的优先级大于回调函数
public boolean onTouchEvent(MotionEvent event)
{
//do something...
return (false/true)
}
true:回调到此为止
false:继续回调父控件的回调函数
View的事件分发
dispatchTouchEvent->setOnTouchListener->onTouchEvent
onclick/onLongClick来自onTouchEvent的处理
Handler消息处理
延时处理
函数原型 : Handler.postDelayed(Runnable r, delaytime ms);
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(HandlerActivity.this, ButtonActivity.class);
}
}, 3000)
线程间通信
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
swtich (msg.what) {
//do something...
}
}
}
在其他线程中做以下操作
Message message = new Message();
mesasge.what = 1;
mHandler.sendMessage(message);
File内部存储
FileOutputStream = openFileOutput(filename, mode);
FileInputStream = openFileInput(filename)
File外部存储
获取外部存储路径
Environment.getExternalStorageDirectory().getAbsolutePath()
6.0版本以上动态申请权限
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.XXX},1)