我已经设法使用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>
谢谢
非常感谢。
答案 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)