0

我在 for 循环中以编程方式定义了一组图像按钮。对于每个按钮,我定义了它的 setOnClickListener 函数,它将一些数据放入 Intent 中,然后切换活动。但是,似乎无论我单击哪个按钮,检索到的额外数据都设置为 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 回答