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 ****/
}

2 番目のケースでは、意図がよくありません。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 ****/

この方法では、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

キーが view.getId() の整数値で、値がアクティビティのクラスである HashMap を定義します。

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

Use your option 1 (Declare Intent before switch):

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 に答える