使用addListenerOnButton的多个按钮

时间:2013-10-28 14:31:07

标签: android eclipse

我正在尝试在主页面上创建一个带有4个按钮的应用程序。每个按钮都链接到一个新的xml页面,但是我使用'AddListenerOnButton'时遇到了麻烦。它适用于第一个,但由于某种原因不是2,3。第四。 我已经使用4 xml按钮/页面引用的每个活动更新了xml-manifest。

每个xml页面都有自己的.class,您可以在我的代码中看到。

这是我的MainActivity:

package com.example.nutritiontest;

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 MainActivity extends Activity {
    ImageButton imagebtn1;
    ImageButton imagebtn2;
    ImageButton imagebtn3;
    ImageButton imagebtn4;

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

        addListenerOnButton();
    }

    public void addListenerOnButton() {
        imagebtn1 = (ImageButton) findViewById(R.id.knapA);
        imagebtn1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {

                Intent intent = new Intent
                        (getApplicationContext(), activityA.class);
                    startActivity(intent); 
            }
        });
    }

    public void addListenerOnButton1() {
        imagebtn2 = (ImageButton) findViewById(R.id.knapB);
        imagebtn2.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {

                Intent intent = new Intent
                        (getApplicationContext(), activityB.class);
                    startActivity(intent); 
            }
        });
    }

public void addListenerOnButton2() {
    imagebtn3 = (ImageButton) findViewById(R.id.knapC);
    imagebtn3.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {

            Intent intent = new Intent
                    (getApplicationContext(), activityC.class);
                startActivity(intent); 
        }
    });
}

public void addListenerOnButton3() {
    imagebtn4 = (ImageButton) findViewById(R.id.knapD);
    imagebtn4.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {

            Intent intent = new Intent
                    (getApplicationContext(), activityD.class);
                startActivity(intent); 
        }
    });
}

}

我对android开发非常新,所以所有的帮助都会受到赞赏

5 个答案:

答案 0 :(得分:2)

您只能调用addListenerOnButton()方法。您还需要为其他3个方法添加调用(addListenerOnButton1,addListenerOnButton2addListenerOnButton3)。

答案 1 :(得分:2)

你只需要调用初始化第一个按钮的方法,你也必须调用其他三个按钮!

试试这个:

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

        addListenerOnButton();
        addListenerOnButton1();
        addListenerOnButton2();
        addListenerOnButton3();
    }

答案 2 :(得分:1)

你应该将这3个调用添加到你的onCreate方法

addListenerOnButton1()
addListenerOnButton2()
addListenerOnButton3()

答案 3 :(得分:0)

我建议使用相同的Activity作为监听器:

public class MainActivity extends Activity implements OnClickListener{
...
public void onCreate(Bundle savedInstanceState) {
    ...
    imagebtn1.setOnClickListener(this)
    imagebtn1.setOnClickListener(this)
    imagebtn1.setOnClickListener(this)
    imagebtn1.setOnClickListener(this)
    ...
}

然后在OnClick上使用带有简单if / elseif:

的按钮过滤掉
@Override
    public void onClick(View arg0) {
    if(view == imagebtn1){
        //do stuff
    }else if (view == imagebtn2){
        //do stuf
    }else if (view == imagebtn3){
        //do stuf
    }else if (view == imagebtn4){
        //do stuf
    }
}

答案 4 :(得分:0)

其他答案已经解决了您当前的问题,但我想提供另一种方法来做到这一点,恕我直言,将更清洁,更少的代码。

首先,只需向listener

中的所有Buttons添加相同的onCreate()
 @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    imagebtn1.setOnClickListener(this);
    imagebtn2.setOnClickListener(this);
    ...
}

然后创建onClick()方法并启用id点击的Button并更改您要转到的课程

 @Override
 public void onClick(View v)
 {
     Intent intent = new Intent();
     String nextAct = null;                    // name for Activity to start with Intent
     String shield = "com.example.nutritiontest.";  // set package name
     int flag = -1;

     switch (v.getId())  // get the id of the View clicked
                             // and compare below
     {
        case (R.id.knapA):
           nextAct = package + "activityA";
           break;
        case (R.id.knapB):
           nextAct = package + "activityB";
           break;
        case (R.id.knapC):
           nextAct = package  + "activityC"; 
           break;
           default:
           Toast.makeText(MainActivity .this, "Item currently not available", Toast.LENGTH_SHORT).show();
    }
    try 
    {
    if (nextAct != null)
    {
        intent = new Intent(MainActivity .this, Class.forName(nextAct));
        flag = Intent.FLAG_ACTIVITY_REORDER_TO_FRONT;
        if (flag != -1)
        {   intent.setFlags(flag);  }
        startActivity(intent);
    }
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

然后您将要实现OnClickListener

public class MainActivity extends Activity implements OnClickListener {

起初看起来可能看起来很复杂或很乱,但是一旦你将其分解,它确实不是。如果您不需要,您甚至可以使用Flags删除这些位。我打算用它们做更多的事情,所以我现在加了它们。您甚至可以删除引用该软件包的部分,只需在每个Intent内添加case,如果它更容易。