具有setOnClickListener的多个ImageButton(单击但不启动活动)

时间:2014-04-14 10:19:40

标签: java android eclipse onclicklistener imagebutton

我已经设法使用ImageButton成功启动两个活动以及与之关联的.setOnClickListener,我还包含了具有不同ImageButton的布局。每个按钮都会启动一项活动。我创建了这些活动。我还设法卸载崩溃错误,lint错误,拥有最新的Android SDK。但是现在即使听到咔嗒声,按钮也会停止工作。活动不会在第一个imageButton上启动,也不会在第二个上启动。

当我放入多个ImageButton时,会发生这种情况。它适用于1个按钮。我怀疑班级中的(this)命令对于调用什么感到困惑。启动新活动的意图调用方法已经过简化,基本可以快速,简单地访问。

有人可以帮我解释为什么多个setOnclickListener无法绑定到相关的imageButtons吗?

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.content.Intent;
import android.view.View.OnClickListener;
import android.widget.ImageButton;

public class MainActivity extends ActionBarActivity implements OnClickListener {
ImageButton imageButton1;
ImageButton imageButton2;
ImageButton imageButton3;
ImageButton imageButton4;
Intent intent;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.reusable_layout);
    imageButton1=(ImageButton)findViewById(R.id.imageButton1);
    imageButton2=(ImageButton)findViewById(R.id.imageButton2);
    imageButton3=(ImageButton)findViewById(R.id.imageButton3);
    imageButton4=(ImageButton)findViewById(R.id.imageButton4);

    imageButton1.setOnClickListener(this);
    imageButton2.setOnClickListener(this);
    imageButton3.setOnClickListener(this);
    imageButton4.setOnClickListener(this);
        }

public void onClick1(View view) {
    Intent intent = 
            new Intent(this, OtherActivity.class);
            startActivity(intent);
}
            public void onClick2(View view) {
                Intent intent = 
                new Intent(this,     OtherActivity2.class);
                startActivity(intent);          
}

如果您注意到我只编写了四个按钮中的2个(因此,一旦此代码在理论上起作用,其他按钮应该如此)。

这是imageButton1调用的OtherActivity。

package com.example.startanotheractivity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;

public class OtherActivity extends Activity
            implements OnClickListener {


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.other_layout);
    Intent intent = getIntent();

}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub

}
}    

这是活动imageButton2调用

package com.example.startanotheractivity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;


public class OtherActivity2 extends Activity
        implements OnClickListener {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.other_layout_2);
Intent intent = getIntent();

}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub

}
}

这是我的layout.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:background="#FFFFFF" >

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:orientation="vertical" >

    <ImageButton
        android:id="@+id/imageButton1"
        android:layout_width="566dp"
        android:layout_height="456dp"
        android:background="@null"
        android:src="@drawable/gatanga1"
        android:onClick="onClick1" />

       <ImageButton
        android:id="@+id/imageButton2"
        android:layout_width="540dp"
        android:layout_height="189dp"
        android:background="@null"
        android:src="@drawable/gatanga2"
        android:onClick="onClick2" />

          <ImageButton
        android:id="@+id/imageButton3"
        android:layout_width="540dp"
        android:layout_height="189dp"
        android:background="@null"
        android:src="@drawable/gatanga3"
        android:onClick="onClick3" />

             <ImageButton
        android:id="@+id/imageButton4"
        android:layout_width="540dp"
        android:layout_height="189dp"
        android:background="@null"
        android:src="@drawable/gatanga4"
        android:onClick="onClick4" />

</LinearLayout>

谢谢

非常感谢。

4 个答案:

答案 0 :(得分:0)

在onClick方法中使用switch语句

 @Override
 public void onClick(View v) {

  switch(v.getId()){

  case R.id.imageButton1: /** Start a new Activity OtherActivity.java */
       Intent intent = new Intent(MainActivity.this, MyCards.class);
       this.startActivity(intent);
       break;

  case R.id.imageButton2:  /** Start a new Activity OtherActivity2.java */
       Intent intent2 = new Intent(MainActivity.this, OtherActivity2.class);
       this.startActivity(intent2);
       break;
  }

答案 1 :(得分:0)

onClick方法将单击的视图作为变量传递,您可以使用switch语句来确定单击了哪个视图,然后就可以执行操作了。

public void onClick(View v) {

  switch(v.getId()){

  case R.id.imageButton1:
       Intent intent = new Intent(MainActivity.this, OtherActivity.class);
       startActivity(intent);
       break;

  case R.id.imageButton2:
       Intent intent = new Intent(MainActivity.this, OtherActivity2.class);
       startActivity(intent2);
       break;
  }
}

答案 2 :(得分:0)

学者,受过教育的贵族,当然还有水管工。

感谢您的回复。它现在通过我做的代码工作,虽然我将尝试上述解决方案。我已经尝试过开关,我喜欢它们。我想确保将内存管理和文件大小保持在最低限度,因为最终应用程序将有大约40个活动。

然而,我这样做的方式是我删除了MainActivity中的所有其他ImageButtons声明,除了:

public class MainActivity extends ActionBarActivity implements OnClickListener {
ImageButton imageButton1;
Intent intent;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.reusable_layout);
imageButton1=(ImageButton)findViewById(R.id.imageButton1);

    }

然后将onClick方法保留为onClick1,onClick2。两项活动都有效。我添加了onClick3和onClick4,如下所示:

public void onClick1(View view) {
Intent intent = 
        new Intent(this, OtherActivity.class);
        startActivity(intent);
}
        public void onClick2(View view) {
            Intent intent = 
            new Intent(this,     OtherActivity2.class);
            startActivity(intent);          
}
        public void onClick3(View view) {
            Intent intent = 
            new Intent(this, OtherActivity3.class);
            startActivity(intent);
}
        public void onClick4(View view) {
            Intent intent = 
            new Intent(this,     OtherActivity4.class);
            startActivity(intent);          
}

我认为似乎发生的事情是代码没有混淆或卡在一个循环中(它没有在我的原始帖子崩溃)。但现在它直接进入布局,获取按钮1和“onClick2”的“onClick1”并将它们与MainActivity中的public void onClick(X)匹配,因为我刚刚声明我正在使用ImageButton和Intent,对在onClickListener之后,它可以工作。

请注意,如果我移动此代码,它会中断或会给我相同的错误。无论如何,我很高兴它有效但我很感兴趣为什么我不必申报所有按钮。也许这只是Java代码工作中的逻辑。

我肯定会尝试以后的试验中的开关和修正。

祝福。

答案 3 :(得分:-1)