1

在我的 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 个应用程序崩溃。

选项 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 ****/

这种方式根本不起作用,我在这里做错了吗?

请有人可以帮助我,我现在正在为此苦苦挣扎几天!

谢谢!

4

4 回答 4

1

定义一个 HashMap,其中键是 view.getId() 的整数值,值是 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() ) );
}
于 2012-11-28T21:14:31.570 回答
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);         

    }   

}
于 2012-11-28T21:41:27.783 回答
0

使用android:onClick xml 属性将按钮点击映射到方法。

因此,您的活动中基本上可以有 20 种方法,如下所示

public void buttonXpressed( View view ){
    startActivity(new Intent(this, MyNextActivity.class));
}

在你的布局 xml

<Button .... 
    android:onClick="buttonXpressed"
   ... >
</Button>
于 2012-11-28T20:55:44.987 回答
-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 ****/
}
于 2012-11-28T21:06:43.997 回答