告诉我单击定义tablerow的方法

时间:2011-12-21 18:30:25

标签: android onclick tablerow

我有这个代码来创建表格布局。在每一行中,都有一个OnclickListener事件。

  for(int i=0;i<5;i++){
        TextView title1 = new TextView(this);
        title1.setText("Thành Phố:"+i);

        TableRow.LayoutParams params = new TableRow.LayoutParams();
        params.span = 5;

        TableRow rowTitle = new TableRow(this);
        rowTitle.setGravity(Gravity.CENTER_HORIZONTAL);
        rowTitle.addView(title1, params);             
        TableRow tbr2 = new TableRow(this);
        **tbr2.setOnClickListener(onclick);**        
        TextView tv2 = new TextView(this);          
        tv2.setText("type"+i);          
        TextView tv3 = new TextView(this);
        tv3.setText("buy"+i);           
        tbr2.addView(tv3);       
        tbr2.addView(tv2);        
        table.addView(rowTitle);
        table.addView(tbr2);        
    }
    scr.addView(table);
    layout.addView(scr);
    setContentView(layout);

这是Onclicklistener

 private OnClickListener onclick = new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        Log.d("1234", "abcd");
    }
};

这是我的问题:我必须做另外的工作。请告诉我如何检查表格行被点击。

3 个答案:

答案 0 :(得分:0)

// Outside loop
int[] ids = {1 , 2 , 3 , 4 , 5}; // or int[] ids = {R.id.table_row_1 // etc };

// Inside loop

TableRow tbr2 = new TableRow(this);
tbr2.setId(ids[i]);
tbr2.setOnClickListener(onclick); 


// On Click
    @Override
    public void onClick(View v) {
        switch(v.getId()){
           case 1: // or R.id.table_row_1
               // tbr2
             break;
        }
    }

SUP? : - )

答案 1 :(得分:0)

Blundell的解决方案完全可以接受。如果您不想这样做,另一种方法是为每一行使用不同的OnClickListener。

private OnClickListener[] clickListeners = new OnClickListener[] { 
    new OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d("0", "Row 0 click");
        }
    },       
    new OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d("1", "Row 1 click");
        }
    }, 
    //Continue with more click listeners
}; 

设置侦听器的代码不是

tbr2.setOnClickListener(clickListeners[i]);

答案 2 :(得分:0)

我建议在每个表行使用setTag(),存储一些识别对象(例如其行号)。为每一行设置相同的onclick。在onClick()中使用v.getTag()获取您的行号(或其他)。

E.g。 (另):

tbr2.setTag(i);

...然后

public void onClick(View v) {
    Log.d("1234", String.format("row %d", v.getTag()));
}