繁体   English   中英

Android传onClick给孩子

[英]Android pass onClick to child

您好,我的目标是让我的自定义视图 (ViewCircleOfInterest.java) 接收 onClick。 现在每次我点击 ViewCircleOfInterest.java 上的 ClickListener 时都不会被调用。

我有趣的布局部分如下所示:

my_layout.xml

<FrameLayout
    android:id="@+id/camera_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@+id/rl"
    android:layout_alignParentTop="true"
    android:background="#bbb">

    <abc.x.y.ViewCircleOfInterest
        android:id="@+id/view_circle_of_interest"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</FrameLayout>

我的布局上有 FrameLayout,我像这样向它添加了视图(SurfaceView - CameraPreview.java)

MyActivity.java

        rootView = findViewById(android.R.id.content).getRootView();
        viewCircleOfInterest = rootView.findViewById(R.id.view_circle_of_interest);
        viewCircleOfInterest.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(NewWayMeasurementActivity.this, "circle a", Toast.LENGTH_SHORT).show();
            }
        });

    (...)

    ((FrameLayout) rootView.findViewById(R.id.camera_view)).addView(cameraPreview);

     (...)

@Override
public boolean dispatchTouchEvent(MotionEvent event) {
    return super.dispatchTouchEvent(event);
}

在我的 init() 方法中的 CameraPreview.java 上,我喜欢这样:

    (...)
    viewCircleOfInterest = ((NewWayMeasurementActivity)activity).viewCircleOfInterest;
    viewCircleOfInterest.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(getContext(), "circle aa", Toast.LENGTH_SHORT).show();
        }
    });

我还在 ViewCircleOfInterest.java 上设置了 onClickListener

public ViewCircleOfInterest(SurfaceView surfaceView) {
    super(surfaceView.getContext());
    this.surfaceView = surfaceView;
    setOnClickListener(this);
}

@Override
public void onClick(View v) {
    Toast.makeText(surfaceView.getContext(), "circle aaa", Toast.LENGTH_SHORT).show();
}

但不幸的是,这种方法不起作用,我仍然无法从我的自定义视图中接收 onclicks。 如何解决? 我希望我的问题和代码是可以理解的。

在您的代码中进行这些更改并检查它是否有效。

my_layout.xml

<FrameLayout
    android:id="@+id/camera_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@+id/rl"
    android:layout_alignParentTop="true"
    android:background="#bbb">

    <abc.x.y.ViewCircleOfInterest
        android:id="@+id/view_circle_of_interest"
        android:layout_width="wrap_content"
        android:clickable="true"
        android:layout_height="wrap_content"/>

</FrameLayout>

MyActivity.java

((FrameLayout)rootView.findViewById(R.id.camera_view)).addView(cameraPreview,0);

在这里,我们在 0 索引处添加cameraPreview ,因此您的自定义视图现在位于顶部,并且应该会收到点击。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM