0

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

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

注意:可能有无限的 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);
4

2 回答 2

2

创建按钮时,您会引用它;只需像添加任何其他按钮一样向其添加 OnClickListener:

Button view3 = new Button(this);
view3.setOnClickListener(new OnClickListener() {
   public void onClick() {
     // do stuff
   }
});
于 2012-08-30T22:02:53.943 回答
0

如果你最终有一个 Button 列表,那么最简单的方法是使用 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);
    }

}
于 2012-08-30T22:17:12.593 回答