Скажите, как был определен способ определения tablerow - PullRequest
0 голосов
/ 21 декабря 2011

У меня есть этот код для создания макета таблицы.В каждой строке было одно событие 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 голосов
/ 21 декабря 2011

Решение Бланделла вполне приемлемо. Если вы не хотите этого делать, другой подход - использовать разные 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]);
0 голосов
/ 22 декабря 2011

Я бы предложил использовать setTag () в каждой строке таблицы, сохраняя некоторый идентифицирующий объект (например, его номер строки). Установите одинаковые onclick для каждой строки. В onClick() используйте v.getTag(), чтобы получить номер строки (или любой другой).

например. (Непроверенные):

tbr2.setTag(i);

тогда ...

public void onClick(View v) {
    Log.d("1234", String.format("row %d", v.getTag()));
}
0 голосов
/ 21 декабря 2011
// 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;
        }
    }

вир? : -)

...