SetOnclick到动态创建的按钮

时间:2012-08-30 21:56:32

标签: android button pass-by-reference

我有两个标签的活动。 第一个有一个按钮。如果按此按钮,将在第二个选项卡中创建一个包含3个视图(ImageView,TextView,Button)的tablerow

当我按下这个按钮(我们刚刚创建的按钮)但我不知道如何引用它时,我想开始一个新的活动。

注意:可能有infinites tableRows。

谢谢!

TableRow tr = new TableRow(this);
ImageView view = new ImageView(this);
TextView view2 = new TextView(this);
Button view3 = new Button (this);

view.setImageBitmap(thumbnail);
view.setPadding(1, 5, 0, 0);
view.setScaleType(ImageView.ScaleType.CENTER_INSIDE);

Calendar c = Calendar.getInstance();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");

view2.setText("" + et.getText()  + dateFormat.format(c.getTime()) );
view2.setGravity(Gravity.CENTER_HORIZONTAL);
view2.setGravity(Gravity.CENTER_VERTICAL);

view3.setGravity(Gravity.RIGHT);
view3.setGravity(Gravity.CENTER_VERTICAL);

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

tr.addView(view, metrics.widthPixels/3, 150);
tr.addView(view2, metrics.widthPixels/2, 100);
tr.addView(view3, metrics.widthPixels/6, 20);
tl.addView(tr);

2 个答案:

答案 0 :(得分:2)

创建按钮时,您可以参考它;只需像添加任何其他按钮一样添加一个OnClickListener:

Button view3 = new Button(this);
view3.setOnClickListener(new OnClickListener() {
   public void onClick() {
     // do stuff
   }
});

答案 1 :(得分:0)

如果您最终得到一个Button列表,那么最简单的方法是使用for for each循环来浏览集合,并在每个循环上调用setOnClickListener方法(使用相同的侦听器实例,或不,取决于你想要的东西):

// Instantiate the listener that will be used by the buttons.
View.OnClickListener clickListener = new View.OnClickListener() {
   public void onClick(View v) {
     // do something...
   }
});

List<Button> buttons = new ArrayList<Button>();

// add button instances to the buttons list

for (Button button : buttons) {
    button.setOnClickListener(clickListener);
}

根据作者的评论更新:

快速而脏的实现,其中您为每个按钮实例化其中一个,还有其他许多其他解决方案:

private class RowButtonListener implements View.OnClickListener {

    private final Context mContext;
    private final String mActivityText;

    public RowButtonListener(Context context, String activityText) { // could be cleaner by providing resource id (int) if you use strings.xml
        mContext = context;
        mActivityText = activityText;
    }

    public void onClick(View v) {
        Intent intent = new Intent(mContext, MyActivity.class);
        intent.putExtra(MyActivity.TEXT_KEY, mActivityText);
        startActivity(intent);
    }

}