带有ImageButton的OnClickListener

时间:2014-04-14 18:38:21

标签: android onclicklistener android-imagebutton

我想创建一个小应用程序,显示几张图片,如果你点击它,吐司会弹出并说出名字。我无法弄清楚它为什么会立即崩溃。 LogCat说Nullpointerexpection之类的东西?!非常感谢您的帮助。

  package com.example.housesgot;
  import android.os.Bundle;
  import android.annotation.SuppressLint;
  import android.app.Activity;
  import android.view.View;
  import android.view.View.OnClickListener;
  import android.widget.ImageButton;
  import android.widget.Toast;

  @SuppressLint("ShowToast")
  public class MainActivity extends Activity implements OnClickListener 
  {

      ImageButton  imageButton1,imageButton2,imageButton3,imageButton4,imageButton5,imageButton6;
      @Override
      protected void onCreate(Bundle savedInstanceState) 
      {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            imageButton1=(ImageButton)findViewById(R.drawable.house_baratheon);
            imageButton2=(ImageButton)findViewById(R.drawable.house_frey);
            imageButton3=(ImageButton)findViewById(R.drawable.house_greyjoy);
            imageButton4=(ImageButton)findViewById(R.drawable.house_lannister);
            imageButton5=(ImageButton)findViewById(R.drawable.house_stark);
            imageButton6=(ImageButton)findViewById(R.drawable.house_targaryen);
            imageButton1.setOnClickListener(this);
            imageButton2.setOnClickListener(this);
            imageButton3.setOnClickListener(this);
            imageButton4.setOnClickListener(this);
            imageButton5.setOnClickListener(this);
            imageButton6.setOnClickListener(this);
      }


    @SuppressLint("ShowToast")
    @Override
    public void onClick(View v) 
    {
        if(v==imageButton1){
            Toast.makeText(MainActivity.this, R.string.baratheon, Toast.LENGTH_LONG);}
        if(v==imageButton2){
            Toast.makeText(MainActivity.this, R.string.frey, Toast.LENGTH_LONG);}
        if(v==imageButton3){
            Toast.makeText(MainActivity.this, R.string.greyjoy, Toast.LENGTH_LONG);}
        if(v==imageButton4){
            Toast.makeText(MainActivity.this, R.string.lannister, Toast.LENGTH_LONG);}
        if(v==imageButton5){
            Toast.makeText(MainActivity.this, R.string.stark, Toast.LENGTH_LONG);}
        if(v==imageButton6){
            Toast.makeText(MainActivity.this, R.string.targaryen, Toast.LENGTH_LONG);}

     }
}

2 个答案:

答案 0 :(得分:1)

imageButton1 = (ImageButton) findViewById(R.drawable.house_baretheon);

请注意该方法是如何调用findViewById的,因此您应该实际为其提供您在图像按钮中注册的ID

您必须先设置活动的内容视图

setContentView(R.layout.activity_main);

这将设置屏幕,并将所有这些按钮放在那里,在您进行此调用之后,您需要获取对所有图像按钮的引用。

对于所有项目,

layout/activity_main.xml应该有一个像这样的图像按钮

<ImageButton
    android:id="@+id/button_house_baretheon"
    android:src="@drawable/house_baretheon"
    ... />

然后通过调用

获取引用

imageButton1 = (ImageButton) findViewById(R.id.button_house_baretheon)

其余代码没问题。

修改

哦等一下,你需要在makeText()方法调用之后调用show(),所以就像这样

Toast.makeText(MainActivity.this,R.string.baratheon,Toast.LENGTH_LONG).show();

答案 1 :(得分:0)

由于您没有发布logcat,我无法更正您的代码,但我可以举一个有效的例子:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.belfast_map);


      ImageButton ib1,ib2,ib3,ib4,ib5;

       //change your image ID's here
       ib1= (ImageButton) findViewById(R.id.go_to_lagan_screen);
       ib2= (ImageButton) findViewById(R.id.go_to_city);
       ib3= (ImageButton) findViewById(R.id.go_to_university);
       ib4= (ImageButton) findViewById(R.id.go_to_icon_screen);
       ib5= (ImageButton) findViewById(R.id.map_to_home_screen);


       ib1.setOnClickListener(new View.OnClickListener()
       {
          @Override
          public void onClick(View v)
          {
             //change the action here, a toast in your example
             Toast.makeText(MainActivity.this, MainActivity.this.getResources().getString(R.string.my_resource_string), Toast.LENGTH_LONG);

          }
       } );

       ib2.setOnClickListener((new View.OnClickListener()
       {
          @Override
          public void onClick(View v)
          {
             Intent intent1= new Intent (MapScreen.this, CityCentre.class);
             startActivity(intent1);
             //To change body of implemented methods use File | Settings | File Templates.
          }
       }));
       ib3.setOnClickListener((new View.OnClickListener()
       {
          @Override
          public void onClick(View v)
          {
             Intent intent2= new Intent (MapScreen.this, UniversityArea.class);
             startActivity(intent2);
             //To change body of implemented methods use File | Settings | File Templates.
          }
       }));
       ib4.setOnClickListener((new View.OnClickListener()
       {
          @Override
          public void onClick(View v)
          {
             Intent intent3= new Intent (MapScreen.this, TheIcons.class);
             startActivity(intent3);

             //To change body of implemented methods use File | Settings | File Templates.
          }
       }));
       ib5.setOnClickListener((new View.OnClickListener()
       {
          @Override
          public void onClick(View v)
          {
             Intent intent4= new Intent (MapScreen.this, MyActivity.class);
             startActivity(intent4);
             //To change body of implemented methods use File | Settings | File Templates.
          }
       }));
    }