当前位置: 首页 > 面试题库 >

以编程方式为场景中的按钮设置onClickListeners

商佑运
2023-03-14
问题内容

我有2个包含相同按钮的布局

layout_1.xml

  <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    <Button
        android:id="@+id/button_1"
        android:text="button2"
        android:background="@android:color/black"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    </RelativeLayout>

layout_2.xml

<RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    <Button
        android:id="@+id/button_1"
        android:text="button2"
        android:background="@android:color/white"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    </RelativeLayout>

请假设这些都是有效的布局等(我只是添加相关代码。)。

因此,在我的片段中,我将其充气并使用layout_1.xmlonCreateView我想使用在两个场景之间切换button_1。我可以button_1layout_1.xml期间设置in
的监听器onCreateView()。问题是试图在第二个视图中的该按钮上设置一个侦听器。即该侦听器未针对第二个场景(使用layout_2.xml)激活,因此我无法在两个场景之间切换。是否有实现此目的的方法?


问题答案:

通常,对同一视图具有多个视图不是一个好主意id。这就是造成混乱的原因。

注意:以下是OP使用的适合其特定需求的解决方案:

一种简单的解决方案是使用onClickXML文件中的属性。您可以将相同的onClick方法分配给多个项目。像这样:

并在您的activity.java中添加以下内容:

public void buttonClicked(View v){

    Log.d("TAG","Button clicked!!"
    // do stuff here

}

第二个选择

当您使用的设置一个按钮的侦听器idbutton_1,不会同时设置listener两个按钮的监听器,而只会为第一个按钮设置监听器。如果要listener为两者都设置相同的值,则要做的就是将这些按钮分配不同ids,然后将它们分配相同listener

这是您应该做的:

Listener myListener = new Listener(){.. blah blah....};

((Button) findViewById(R.id.some_id)).setListerner(myListener);
((Button) findViewById(R.id.some_other_id)).setListerner(myListener);

第三种选择

findViewById(R.id.id_of_layout1).findViewById(R.id.button_1)
findViewById(R.id.id_of_layout2).findViewById(R.id.button_1)

在这种情况下,您需要向布局文件中添加一些ID,例如:layout_1.xml:

<RelativeLayout
        android:id="+id/id_of_layout1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    <Button
        android:id="@+id/button_1"
        android:text="button2"
        android:background="@android:color/black"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    </RelativeLayout>


 类似资料:
  • 问题内容: 当我尝试在Swift中创建按钮并设置背景图片时: 我总是收到一个错误:“ 无法将表达式的类型’Void’转换为’UIImage’ ”。 问题答案: 您的代码应如下所示

  • 我想通过编程设置单选按钮的色调。在xml中,有一个名为“buttonint”的属性来完成这项工作。但在程序中,我找不到任何方法来设置单选按钮的色调或颜色。有什么方法可以做到这一点吗?

  • 问题内容: 我正在动态创建按钮。我首先使用XML设置了样式,然后尝试使用下面的XML使其具有程序性。 这是我到目前为止所拥有的。除了可绘制对象,我可以做所有事情。 问题答案: 你可以使用该方法执行此操作。请参阅此处的示例。我在不使用的情况下使用了它,并且效果很好。你可以尝试任何一种方式。 更新:如果链接断开,请在此处复制代码 要么 要么

  • 我用一些按钮以编程方式创建AlertDialog的LinearLayout。 我想这样做: 但对于这样的代码: 如何以编程方式设置按钮的样式(使用按钮栏)?

  • 我想设置Appium标志——不以编程方式重置。 当我们不想在会话之间重置应用程序状态(IOS:不删除应用程序列表文件;Android:不在新会话之前卸载应用程序)时,使用此标志。它的默认值为False,我想将其设置为true,因为我在本地环境中通过设置--no reset=true编写了测试脚本。。 我为什么要这么做 我正在使用AWS-Device Farm(它使用云服务在多个真实设备上运行测试用

  • 问题内容: 如何以编程方式添加一个单击按钮即可执行操作的按钮?将使用什么代码? 我习惯在情节提要中添加一个按钮,然后从那里运行IBAction。 问题答案: 在SpriteKit中添加按钮并响应其点击并不像在UIKit中那样容易。基本上,您需要创建某种类型的对象,以绘制您的按钮,然后检查场景中记录的触摸是否在该节点的范围内。 一个非常简单的场景,中心只有一个红色矩形作为按钮,看起来像这样: 如果您