我有两个包含相同按钮的布局
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.xml
中充气并使用onCreateView
。我想使用button_1
在两个场景之间切换。
我可以在button_1
期间在layout_1.xml
中为onCreateView()
设置听众。
问题是尝试在第二个视图中设置该按钮的监听器.i.e。监听器没有激活第二个场景(layout_2.xml
)。因此我可以在两个场景之间切换。有没有办法实现这个目标?
答案 0 :(得分:6)
实际上,这样做的正确方法是在第二个场景中定义要执行的操作:
mSecondScene.setEnterAction(new Runnable() {
@Override
public void run() {
((Button) mSecondScene.getSceneRoot().findViewById(R.id. button_1)).setOnClickListener( ... );
}
这将允许您在View上设置ClickListener,而不将数据绑定到通用单击侦听器方法。然后你可以执行转换到第二个场景和中提琴。
答案 1 :(得分:2)
一般情况下,使用相同id
的多个视图并不是一个好主意。这就是造成混乱的原因。
注意:以下是OP使用的适合其特定需求的解决方案:
一个简单的解决方案是在XML文件中使用onClick
属性。您可以将相同的onClick方法分配给多个项目。像这样:
在你的activity.java中添加:
public void buttonClicked(View v){
Log.d("TAG","Button clicked!!"
// do stuff here
}
第二个选项:
当您使用id
button_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);
第3个选项:
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>