android - 如何知道在布局 OnClickListener 中单击了哪个 View ?

标签 android android-layout android-view android-event

我有一个包含一些 View 的布局。我想在用户单击布局上的任意位置时设置一些操作,因此我为布局设置了一个 OnClickListener,它应该可以正常工作。但是我怎么知道点击了哪个 View 呢? 我想根据单击的 View 分配不同的操作;或者可能没有点击 View ,它只是布局本身。 所以问题是,如果我为其中一个 View 设置 OnClickListener,则与布局和 View 相关的 OnCLickListener 都将被激活,但我只想要 View 操作。提前致谢。

最佳答案

其他答案很抽象,有些不正确。您不能覆盖 Activity 的 onClick 方法,因为它没有方法(当然除非您实现了 OnClickListener)。

此外,如果您为布局设置监听器,则 onClick 方法接收的 View 参数将始终是布局。


您可以创建自己的自定义布局来拦截点击并检查您是否点击了某个 View ,或者您可以为所有 View 设置监听器。

一个有点更干净的解决方案是使用单个监听器并检查它是否是被点击的 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);
}

如果您想要对不同的 View 执行不同的操作,只需为每个 View 创建一个监听器即可。

关于android - 如何知道在布局 OnClickListener 中单击了哪个 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25155065/

相关文章:

android - 如何在我在屏幕上触摸的地方的正上方显示一个弹出窗口

java - 仅在添加 WebView 和 TextView 时才在 LinearLayout 中动态创建 WebView 和 TextView

java - WebViews 的 ViewGroup 历史记录问题

android - 在线性布局android中平滑地动画 View 隐藏/显示

java - v.performClick() 无响应

java - XML 布局文件无法在 Mac 上的 Android Studio 中打开

android - 加载列表时显示进度条

android - Retrofit 2.0 - 如何获取 400 Bad Request 错误的响应正文?

Android 应用清理架构 : Should data layer have its own model classes?

android - 如何在android中设计这样的 View 转换