为FrameLayout内的所有自定义视图触发了OnClickListener

时间:2018-05-02 02:28:07

标签: android android-custom-view android-framelayout android-touch-event

我正在以编程方式向FrameLayout添加自定义视图:

$ xsltproc cookies2.xsl cookies.xml | xmllint --format -
<?xml version="1.0"?>
<Cookies>
  <Cookie action="update" name="PD_STATEFUL_2707f5b6-48e3-11e8-bb87-000c2953888d">
    <Secure>1</Secure>
    <HTTPOnly>1</HTTPOnly>
  </Cookie>
  <Cookie action="update" name="PD_STATEFUL_2808f5b6-48e3-11e8-bb87-000c2953180d">
    <Secure>1</Secure>
    <HTTPOnly>1</HTTPOnly>
  </Cookie>
</Cookies>

-

=

现在,当我点击自定义视图时,会触发两个自定义视图的事件,而不仅仅是我点击的视图。我可以一个接一个地看到两个Toasts。有什么想法吗?

更新1 - 更多详情 我正在研究AR应用程序,我尝试根据位置数据(GPS)集成视图,这些工作正常。唯一不起作用的是我的自定义视图的监听器。我可以在CameraView / SurfaceView中看到我的两个自定义视图,它们不在同一个位置

public class CustomView extends View {
 ....
    @Override
    protected void onDraw(Canvas canvas) {
       ... //Doing stuff here 
    }
}

我甚至试图像这样加倍努力

containerLayout = (FrameLayout) findViewById(R.id.container_layout);

CustomView cv1 = new CustomView(ctx);
CustomView cv2 = new CustomView(ctx);

cv1.setOnClickListener(new OnClickListener({
 Toast.makeText(ThisActivity.this, "FooBar", Toast.LENGTH_LONG).show();
});

cv2.setOnClickListener(new OnClickListener({
 Toast.makeText(ThisActivity.this, "BlaBlub", Toast.LENGTH_LONG).show();
});

container_layout.addView(cv1);
container_layout.addView(cv2);

1 个答案:

答案 0 :(得分:1)

您应该将FrameLayout替换为LinearLayout,使两个CustomView不具有相同的位置。您的问题发生是因为在framelayout中的CustomView1和CustomView2并且位置相同。

  

FrameLayout旨在阻挡屏幕上的某个区域以显示单个项目。通常,FrameLayout应该用于保存单个子视图,因为以可以扩展到不同屏幕大小而儿童不会相互重叠的方式组织子视图可能很困难。但是,您可以使用android:layout_gravity属性将多个子项添加到FrameLayout并通过为每个子项分配重力来控制它们在FrameLayout中的位置。