在自定义 View 时,每个 view 里面一般都会写一次 OnClick 事件
今天使用另外一种方式将点击事件从我们的 activity 或者自定义 View 中抽取出来
利于 java8 中一个特性 双冒号:: 关键字
java 8 中:: 关键字可以用来引用类的方法
利于这一点我们用另一个风格写一下 android 中的点击事件
public class ItemClickHandler {
public static final View.OnClickListener INSTANCE = ItemClickHandler::onItemClick;
private static void onItemClick(View v) {
switch (v.getId()) {
case R.id.btn_1:
Toast.makeText(v.getContext().getApplicationContext(), "button1", Toast.LENGTH_SHORT).show();
break;
case R.id.btn_2:
Toast.makeText(v.getContext().getApplicationContext(), "button2", Toast.LENGTH_SHORT).show();
break;
case R.id.btn_3:
Toast.makeText(v.getContext().getApplicationContext(), "button2", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
}
这样我们就可以实现在一个地方定义,别处使用
public class TestActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
findViewById(R.id.btn_1).setOnClickListener(ItemClickHandler.INSTANCE);
}
}
public class NavigationView extends RelativeLayout {
protected void bindClick() {
findViewById(R.id.btn_2).setOnClickListener(ItemClickHandler.INSTANCE);
}
}
public class BottomView extends RelativeLayout {
protected void bindClick() {
findViewById(R.id.btn_3).setOnClickListener(ItemClickHandler.INSTANCE);
}
}
【packages/apps/Launcher3/src/com/android/launcher3/touch/ItemClickHandler.java】
【---> ItemClickHandler.java】
/**
* Class for handling clicks on workspace and all-apps items
*/
public class ItemClickHandler {
/**
* Instance used for click handling on items
*/
public static final OnClickListener INSTANCE = ItemClickHandler::onClick;
//点击事件
private static void onClick(View v) {
// Make sure that rogue clicks don't get through while allapps is launching, or after the
// view has detached (it's possible for this to happen if the view is removed mid touch).
if (v.getWindowToken() == null) {
return;
}
Launcher launcher = Launcher.getLauncher(v.getContext());
if (!launcher.getWorkspace().isFinishedSwitchingState()) {
return;
}
Object tag = v.getTag();
if (tag instanceof ShortcutInfo) {
onClickAppShortcut(v, (ShortcutInfo) tag, launcher);
} else if (tag instanceof FolderInfo) {
if (v instanceof FolderIcon) {
onClickFolderIcon(v);
}
} else if (tag instanceof AppInfo) {
//点击 icon 启动应用
startAppShortcutOrInfoActivity(v, (AppInfo) tag, launcher);
} else if (tag instanceof LauncherAppWidgetInfo) {
if (v instanceof PendingAppWidgetHostView) {
onClickPendingWidget((PendingAppWidgetHostView) v, launcher);
}
}
}
//...
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有