按下时会触发两个按钮,但会触发错误事件

时间:2014-10-11 18:01:29

标签: android onclicklistener android-button

我有两个按钮的非常奇怪的行为:

<Button
    android:id="@+id/main_button_logout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/main_button_measure"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="76dp"
    android:text="@string/button_logout" />

<Button
    android:id="@+id/main_button_measure"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/main_button_logout"
    android:layout_alignStart="@+id/main_button_logout"
    android:layout_alignParentTop="true"
    android:layout_marginTop="194dp"
    android:text="@string/button_measure" />

我在我的主要活动中初始化它们:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    this.sessionManager = new SessionManager(this);
    this.sessionManager.login();

    this.setContentView(R.layout.activity_main);

    this.buttonMeasure = (Button)this.findViewById(R.id.main_button_measure);
    this.buttonMeasure.setOnClickListener(this);
    this.buttonLogout = (Button)this.findViewById(R.id.main_button_logout);
    this.buttonLogout.setOnClickListener(this);
}

我的点击监听器:

public void onClick(View view) {
    switch(view.getId()) {
        case R.id.main_button_measure : this.readNFC(view); break;
        case R.id.main_button_logout : this.sessionManager.logout(); break;
    }
}

现在问题是:每当我按下我的测量按钮时,每次都会调用注销 我调用我的注销按钮调用readNFC。那有什么不对吗?

1 个答案:

答案 0 :(得分:0)

当您更改布局时会发生这种情况,例如只重建了部分应用程序(其余部分,例如,源代码将使用之前的构建工件,如果它们没有更改)和具有相同名称的资源ID在xml布局中,java源实际上将转换为不同的int ID。

尝试在onCreate()中放置一个断点,并检查您设置点击监听器的2 Button的详细信息,很可能this.buttonMeasure将引用退出按钮 (例如,将具有76dp的上边距),反之亦然。

所以只需清理和重建,它应该可以解决您的问题。 你可以把它归咎于构建工具;)