我正在尝试在主页面上创建一个带有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开发非常新,所以所有的帮助都会受到赞赏
答案 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
,如果它更容易。