0

forループで一連の画像ボタンをプログラムで定義しました。ボタンごとに、setOnClickListener関数を定義しました。この関数は、データをインテントに入れてから、アクティビティを切り替えます。ただし、どのボタンをクリックしても、取得された追加データはforループの最後の値に設定されているようです。ここのコードを参照してください:

public void onCreate(Bundle savedInstanceState) {
   <...>

        RelativeLayout rl = (RelativeLayout) findViewById(R.id.rlayout);

        for (int i=1; i<=maxMapLoc; i++ ) {
            mapLocation = i;
            ImageButton btnMapLoc = new ImageButton(FirstActivity.this);
            RelativeLayout.LayoutParams vp = new RelativeLayout.LayoutParams(
                    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
            btnMapLoc.setLayoutParams(vp);
            btnMapLoc.setBackgroundColor(Color.TRANSPARENT);
            btnMapLoc.requestLayout();
            String imgName = "map_loc_" + mapLocation;                
            int id = getResources().getIdentifier(imgName,"drawable",getPackageName());
            btnMapLoc.setImageResource(id);
            int imgMapLoc = 2000 + mapLocation;
            btnMapLoc.setId(imgMapLoc);
            rl.addView(btnMapLoc, vp);

            btnMapLoc.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
                    intent.putExtra("MapLocation", mapLocation);

                    startActivity(intent);

                }
            });

私が何を間違えたのか分かりますか?

ありがとう。

4

1 に答える 1

3

現在のmapLocation値を使用してボタンにタグを追加できます。

btnMapLoc.setTag(i);
...

// In onClick
    intent.putExtra("MapLocation", v.getTag());
    ...

の最後の値のみを取得する理由mapLocationは、ユーザーがボタンを押したときにonClick()内のコードが実行されるためです。言い換えればmapLocation、ループがボタンを作成してからずっと後にクエリを実行しているということです。mapLocationタグ機能の場合と同様に、ループの反復ごとに電流への参照を作成する必要があります。

于 2012-05-09T19:45:06.507 に答える