2011-12-21 5 views
0

테이블 레이아웃을 생성하려면이 코드가 있어야합니다. 모든 행에 OnclickListener 이벤트가 하나 있습니다.tablerow를 정의하는 방법을 알려주십시오.

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"); 
    } 
}; 

이며,이 내 proplem입니다 : 내가 다른 작업을 수행해야합니다 everyrow. 표 행을 확인하는 방법을 알려주십시오.

답변

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? :-)

+0

정말 고마워요! –

0

Blundell의 솔루션은 완벽하게 수용 가능합니다. 그렇게하고 싶지 않다면, 다른 접근법은 각 행에 다른 OnClickListener를 사용하는 것입니다.

tbr2.setOnClickListener(clickListeners[i]); 
0

I 몇몇 식별 목적 (예를 들어 그것의 행 번호)를 저장, 각 테이블의 행에 setTag()을 이용한 제안이되고보다

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 
}; 

코드는 청취자를 설정한다. 모든 행에 대해 동일한 onclick을 설정하십시오. onClick()에서 v.getTag()을 사용하여 행 번호를 얻습니다 (또는 무엇이든).

예. (안된) : ... 다음

tbr2.setTag(i); 

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

정말 고마워요! –

+0

이 정확한 시나리오를 위해 setId가 설계되었을 때 setTag를 사용해야하는 이유는 무엇입니까? 코드를 유지 관리해야하는 사람을 혼란스럽게 할 것입니다. – Blundell

+0

정수는 유용하게 저장할 수있는 것 중 하나 일뿐입니다. 해당 행의 데이터 필드를 모두 저장하는 객체가 실제로 여기에서 더 유용 할 수 있습니다. 이것이 내가 "일부 식별 객체"라고 말한 이유입니다. 하지만 네, 단지 int를 저장하고 싶다면 setId()가 작동합니다. –

관련 문제