在我的Android应用程序中,有一个活动,其中包含20个按钮。每个按钮都必须转到另一个活动/页面。 我尝试了几种方法,但我不能多次使用意图。
选项1:
public void onClick(View v) {
switch(v.getId()){
case R.id.ivNB:
Intent intent = new Intent(this, NoordBrabant.class);
this.startActivity(intent);
break;
case R.id.ivZH1:
Intent intent = new Intent(this, ZuidHolland.class);
this.startActivity(intent);
break;
/**** End so 20 more ****/
}
在第二种情况下,意图不好,我不能在1个开关中使用更多意图吗?
选项2:
ivNB.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(getApplicationContext(), NoordBrabant.class);
startActivity(i);
}
});
ivZeeland.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(getApplicationContext(), Zeeland.class);
startActivity(i);
}
});
/**** End so 20 more ****/
这种方式与maby 10中的5个相同,但有20个App崩溃。
选项3:
public void onClick(View v) {
if (v == ivGelderland){
Intent intent = new Intent(this, Gelderland.class);
this.startActivity(intent);
}
else if (v == ivNB) {
Intent intent = new Intent(this, NoordBrabant.class);
this.startActivity(intent);
}
else if (v == ivLimburg) {
Intent intent = new Intent(this, Limburg.class);
this.startActivity(intent);
}
/**** End so 20 more ****/
这种方式根本不起作用,我在这里做错了吗?
请有人帮助我,我现在正在努力奋斗几天!
谢谢!
答案 0 :(得分:1)
定义一个HashMap,其中key是view.getId()的Integer值,value是Activity的类。
private static HashMap<Integer,Class> activityMap = new HashMap<Intger,Class>();
static {
activityMap.put( R.id.ivNB, NoordBrabant.class );
activityMap.put( R.id.ivZH1, ZuidHolland.class );
//...
}
// use this in the layout xml file for all the buttons onClick attribute
public void handleBtnClicked( View vw ) {
startActivity( new Intent( this, activityMap.get( vw.getId() ) );
}
答案 1 :(得分:0)
使用android:onClick xml attribute将按钮点击映射到方法。
所以你的活动基本上可以有20个方法,如下面的
public void buttonXpressed( View view ){
startActivity(new Intent(this, MyNextActivity.class));
}
在你的布局xml中
<Button ....
android:onClick="buttonXpressed"
... >
</Button>
答案 2 :(得分:0)
您可以创建自定义并覆盖onClick事件,然后只传递目标活动。
//自定义按钮
import android.content.Context;
import android.content.Intent;
import android.util.AttributeSet;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MyBtn extends Button implements OnClickListener {
private Context context;
private Class _class;
public MyBtn(Context context, AttributeSet attrs) {
super(context, attrs);
init();
this.context = context;
}
private void init() {
setOnClickListener(this);
}
public void setActivity(Class _class) {
this._class = _class;
}
@Override
public void onClick(View v) {
Intent i = new Intent(context, _class);
this.context.startActivity(i);
}
}
//你的布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" android:orientation="vertical" >
<com.example.mixed.MyBtn
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
<com.example.mixed.MyBtn
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
<com.example.mixed.MyBtn
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
<com.example.mixed.MyBtn
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>
//您的主要活动
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
com.example.mixed.MyBtn btn1 = (com.example.mixed.MyBtn)findViewById(R.id.button1);
com.example.mixed.MyBtn btn2 = (com.example.mixed.MyBtn)findViewById(R.id.button2);
com.example.mixed.MyBtn btn3 = (com.example.mixed.MyBtn)findViewById(R.id.button3);
com.example.mixed.MyBtn btn4 = (com.example.mixed.MyBtn)findViewById(R.id.button4);
btn1.setActivity(MainActivity2.class);
btn2.setActivity(MainActivity3.class);
btn3.setActivity(MainActivity4.class);
btn4.setActivity(MainActivity5.class);
}
}
答案 3 :(得分:-1)
使用您的选项1(切换前声明意图):
public void onClick(View v) {
Intent intent;
switch(v.getId()){
case R.id.ivNB:
intent = new Intent(this, NoordBrabant.class);
this.startActivity(intent);
break;
case R.id.ivZH1:
intent = new Intent(this, ZuidHolland.class);
this.startActivity(intent);
break;
/**** End so 20 more ****/
}