2012-01-16 68 views
2

我与我的android点击监听按钮一些非常奇怪的麻烦!我已经做了好几次了,我疯了,没有为这个错误找到一个解决方案(既不是合理的解释)。单击安卓按钮听众按钮不工作

错误 我的活动上的2个按钮的事件处理程序没有被执行。没有错误,它只是没有在运行时执行处理程序动作。这是一个按钮的代码:

btnNext = (Button) findViewById(R.listclient.btnnext); 
btnNext.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      Toast.makeText(MyActivityClassName.this, "Flag 01", 1).show(); 
          btnNext.setText("CLICKED!"); 
     } 
    }); 

这就是XML的布局按钮:

<Button android:id="@+listclient/btnnext" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:clickable="true" 
      style="@style/Widget.TextViewInfo" 
      android:text="Next" 
      /> 

信息

  • 也有这个活动里面的ImageButton的,这imageButton完美地与一个内部的OnClickListener类(就像这个一样)。
  • 我已经试图让我的活动类继承OnClickListener,并将它设置为按钮的点击侦听器,但没有成功。
  • 我也在我的Activity类中创建了一个类,并将其设置为按钮点击侦听器,但也没有成功。

我编译为Android 2.1 +谷歌API(SDK 7)

------------ EDITED ------------- ----

如果我把我的代码:

btnNext.performClick(); 

它的执行!我现在变得更疯狂了! 当我触摸它时,实际上点击了按钮,我可以看到按钮“动画”,并且点击被记录在LogCat中。

回答

8

指定或使用id时,不能使用listclient。第一部分是资源的类型,您的情况必须是id

更改android:id="@+listclient/btnnext"android:id="@+id/btnnext"。还可以调整你的代码:

btnNext = (Button) findViewById(R.id.btnnext); 
+0

我的应用程序真的很大(大约50项活动),在很多情况下,我们在不同的活动中使用相同的按钮名称。为了防止使用“id /”实现大量的小部件引用,我们使用布局的名称来分隔小部件。例如,我在其他2个布局中有一个“btnext”。 但我试过你的建议,它仍然无法正常工作。 – IPValverde 2012-01-16 15:58:49

+2

两种解决方案:a)以不同的方式加前缀,比如'android:id =“@ + id/listclient_btnnext”'(然后在代码中使用'R.id.listclient_bttnnext')。或者b)不关心和重复使用它们。 'findViewById()'只在当前视图层次(=可见布局)中搜索。因此,如果您有3种不同布局的活动,则无关紧要。它会找到与活动布局相关的一个。 (这就是为什么''findViewById()''总是返回'null',如果你在'setContentView()'之前调用它,那么没有视图层次结构) – user287351 2012-01-16 16:01:17

+0

嗯......+1 我不知道!我认为使用“id /”更好。 但不幸的是,它不是问题,因为更改引用并没有使clickEvent被调用。 – IPValverde 2012-01-16 16:06:27

0

快速浏览了你的代码,我注意到当你没有正确地调用findViewById。将Button的ID更改为“test”,然后尝试:findViewById(R.id.test)。合理?