1

私は Android プログラミングにかなり慣れていないので、自分のコードが特定の行を通過しない理由がわかりません。26 枚の画像 (アルファベットの文字) があり、それらをクリックするとすべての画像に何かが実行されるようにしたいので、for ループを設定して、各画像の onclick リスナーを設定します。携帯電話で実行し、ログの猫を見ると、null ポインター例外が発生してクラッシュしたと表示されます。以下の onCreate() メソッドを見ると、次のようになります。

Log.d("LetterMenu Class", "for loop2");

しかし、それは決して到達しません

Log.d("LetterMenu Class", "for loop3");

または

Log.d("LetterMenu Class", "before switch");

これは onClick() メソッドの中にあります...そのため、どうやら OnClickListener の設定方法に気に入らない点があるようですが (私は想定しています)、それが何であるかを理解できないようです。そのような配列を使用して OnClickListener を設定できますか? ところで、switch ステートメントにはさらに多くのケースがあり、正しく閉じられています。スペースを節約するためにそれを含めませんでした。助けてくれてありがとう。

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;

public class LetterMenu extends Activity implements OnClickListener{

    String[] buttonNames = {"aButton", "bButton", "cButton", "dButton", "eButton",
            "fButton", "gButton", "hButton", "iButton", "jButton", "kButton", "lButton",
            "mButton", "nButton", "oButton", "pButton", "qButton", "rButton", "sButton",
            "tButton", "uButton", "vButton", "wButton", "xButton", "yButton", "zButton"};
    ImageButton[] letterButtons = new ImageButton[26];
    Intent intent;
    int res_id;

    public void onCreate(Bundle savedInstanceState){
        Log.d("LetterMenu Class", "onCreate");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.letters);       

        for(int i = 0; i< 26; i++){
            res_id = getResources().getIdentifier(buttonNames[i], "id", getPackageName());
            Log.d("LetterMenu Class", "for loop");
            letterButtons[i] = (ImageButton) findViewById(res_id);
            Log.d("LetterMenu Class", "for loop2");
            letterButtons[i].setOnClickListener(LetterMenu.this);
            Log.d("LetterMenu Class", "for loop3");
        }
    }

    @Override
    public void onClick(View v) {
        Log.d("LetterMenu Class", "before switch");
        switch(res_id){
        case R.id.aButton:
            Log.d("LetterMenu Class", "onClick1");
            intent = new Intent(this, Letters.class);
            intent.putExtra("LETTER_CLICKED", 'a');
            break;

        case R.id.bButton:
            intent = new Intent(this, Letters.class);
            intent.putExtra("LETTER_CLICKED", 'b');
            break;

        case R.id.cButton:
            intent = new Intent(this, Letters.class);
            intent.putExtra("LETTER_CLICKED", 'c');
            break;
4

0 に答える 0