怎么才能知道在ClickListener上点击了布局中的哪个视图?

本教程将介绍如何才能知道在ClickListener上点击了布局中的哪个视图?的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

怎么才能知道在ClickListener上点击了布局中的哪个视图? 教程 第1张

问题描述

我有一个包含一些视图的布局。我想在用户单击布局上的任何位置时设置一些操作,因此我已经为布局设置了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上点击了布局中的哪个视图?的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。