How is it possible to know which View is clicked in a layout OnClickListener?(如何才能知道在ClickListener上点击了布局中的哪个视图?)
本文介绍了如何才能知道在ClickListener上点击了布局中的哪个视图?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个包含一些视图的布局。我想在用户单击布局上的任何位置时设置一些操作,因此我已经为布局设置了OnClickListener,它的工作方式应该是这样的。但是我怎么知道哪个视图被点击了呢? 我想根据所单击的视图分配不同的操作;或者可能没有单击任何视图,而只是布局本身。 所以问题是,如果我为其中一个视图设置了OnClickListener,与布局和视图相关的两个OnCLickListeners都将被激活,但我只想要视图操作。提前谢谢。
推荐答案
其他答案非常抽象,有些是不正确的。您不能重写活动的onClick方法,因为它没有onClickListener(当然,除非您实现了OnClickListener)。
此外,如果为布局设置侦听器,则onClick方法接收的View
参数将始终是布局。
您可以创建自己的自定义布局来拦截单击并检查您是否单击了某个视图,也可以为所有视图设置监听程序。
某种程度上更简洁的解决方案是使用单个侦听程序,并检查它是否是被单击的视图。
private final String TAG = "MainActivity";
List<View> views = new ArrayList<View>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RelativeLayout rLayout = (RelativeLayout) findViewById(R.id.relativeLayout);
TextView tv1 = (TextView) findViewById(R.id.tv1);
TextView tv2 = (TextView) findViewById(R.id.tv2);
TextView tv3 = (TextView) findViewById(R.id.tv3);
views.add(tv1);
views.add(tv2);
views.add(tv3);
View.OnClickListener clickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean isView = false;
for (View view : views) {
if (v.equals(view)) {
isView = true;
break;
}
}
if (isView) {
Log.e(TAG, "Click on view");
} else {
Log.e(TAG, "Click on layout");
}
}
};
tv1.setOnClickListener(clickListener);
tv2.setOnClickListener(clickListener);
tv3.setOnClickListener(clickListener);
rLayout.setOnClickListener(clickListener);
}
如果要为不同的视图执行不同的操作,只需为每个视图创建一个侦听器。
这篇关于如何才能知道在ClickListener上点击了布局中的哪个视图?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何才能知道在ClickListener上点击了布局中的哪个视图?
基础教程推荐
猜你喜欢
- 如何在 UIImageView 中异步加载图像? 2022-01-01
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01
- Android:对话框关闭而不调用关闭 2022-01-01
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01
- android 应用程序已发布,但在 google play 中找不到 2022-01-01
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01