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

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

layout_1.xml

   

layout_2.xml

  

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

所以在我的片段中,我在onCreateView膨胀并使用layout_1.xml 。我想使用layout_1.xml在两个场景之间切换。 我可以在onCreateView()期间在layout_1.xml中为button_1设置监听器。 问题是试图在第二个视图中的那个按钮上设置一个监听器。监听器没有为第二个场景激活(使用layout_2.xml )。因此我可以在两个场景之间切换。是否有办法实现这一点?

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

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

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

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

 public void buttonClicked(View v){ Log.d("TAG","Button clicked!!" // do stuff here } 

第二种选择

当您为一个按钮设置一个idbutton_1listener 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); 

第三种选择

 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:

    

实际上看起来这样做的正确方法是在第二个场景中定义要执行的动作:

 mSecondScene.setEnterAction(new Runnable() { @Override public void run() { ((Button) mSecondScene.getSceneRoot().findViewById(R.id. button_1)).setOnClickListener( ... ); } 

这将允许您在视图上设置ClickListener,而不将数据绑定到通用单击侦听器方法。 然后你可以执行转换到第二个场景和中提琴。