LinearLayout(带有onClick)包含ImageButton-是否有更好的解决方法?

4

目前我有以下内容:

<LinearLayout android:layout_height="80dip" android:id="@+id/linearLayoutSettings"
 android:layout_width="80dip" android:orientation="vertical">

    <ImageButton android:layout_height="wrap_content" android:src="@android:drawable/ic_menu_manage" 
android:id="@+id/imageButton1" android:layout_width="wrap_content"></ImageButton>

</LinearLayout>

LinearLayout附有OnClick监听器。

问题:当在LinearLayout内点击ImageButton时,事件未被触发。

我可以通过将与LinearLayout相同的点击附加到此按钮来解决它。但是,在这种情况下,这意味着大量重复的代码(有许多按钮)。

问题:是否有更有效的方法来解决这个问题?

5个回答

2
将ImageButton更改为ImageView,您将开始接收单击事件。

1

将以下标签附加到每个图像按钮:
android:onClick="yourOnClickFunction"
然后,在您的活动中添加相应的函数:

public void yourOnClickFunction(final View v) {
switch(v.getId()) {
     //Do whatever is necessary.
}
}

在switch块中,您需要了解按钮ID。您可以通过findViewById(R.id.aButton)获取它们。

除了m1ntf4n的建议之外,我会删除附加到LinearLayout的onClickListener,除非它还有其他用途。 - glorifiedHacker
当然,每个ImageButton都需要一个android:id。 - m1ntf4n

0
你可以编写循环来查找布局中的所有按钮,并将一次创建的监听器附加到它们上面。

0
如果我理解正确,当按钮被点击时,LinearLayout的onClickListener不会触发。这很有道理。
你可以做的是放置一个yourLinearLayout.performClick();,它将以编程方式触发布局的onClick事件。如果你把它放在按钮onClick的结尾,那么它将按顺序执行按钮,然后是布局。

在我的看法中,当父元素注册了 onClick 事件而子元素没有注册时,将父元素的 onClick 事件传递给子元素(继承)似乎更合乎逻辑。 - Indrek Kõue

0

你必须设置属性 setClickable(true); !! 你可以在XML中使用 android:clickable="true" 访问它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接