2012-07-05 56 views
0

我創建內動態選擇tablerow的一個Tablelayout許多TableRows,例如:一個TableLayout動態

for(int i = 0; i<cont; i++) 
       { 
        id[i] = customers[i].CustomerNumber; 

        //Create a new row to be added. 
        tr = new TableRow(this); 

        //Create text views to be added to the row. 
        tv = new TextView(this); 

        //Put the data into the text view by passing it to a user defined function createView() 
        createView(tr, tv, id[i].ToString()); 


        //Add the new row to our tableLayout tl 
        tl.AddView(tr); 
       }  

這是CreateView的代碼:

private void createView(TableRow tr, TextView t, String viewdata) { 

     t.SetText(viewdata, TextView.BufferType.Editable); 

     //adjust the porperties of the textView 

     //t.SetLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)); 

     //You have to use Android.Graphics.Color not System.ConsoleColor; 
     t.SetTextColor(Color.Blue); 
     t.SetBackgroundColor(Color.Cyan); 
     t.SetPadding(5, 0, 0, 0); 

     tr.SetPadding(0, 1, 0, 1); 
     tr.SetBackgroundColor(Color.Black); 

     tr.AddView(t); // add TextView to row. 

    } 

我的問題是,我希望從包含單行內所有內容的TableLayout中進行選擇,以便能夠選擇並響應點擊事件,以便將其用於其他目的。

回答

3

改變你的代碼製作的TableRow可點擊設置tr.setClickable(true)並添加setOnClickListener

private void createView(TableRow tr, TextView t, String viewdata) { 

     t.SetText(viewdata, TextView.BufferType.Editable); 

     //adjust the porperties of the textView 

     //t.SetLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)); 

     //You have to use Android.Graphics.Color not System.ConsoleColor; 
     t.SetTextColor(Color.Blue); 
     t.SetBackgroundColor(Color.Cyan); 
     t.SetPadding(5, 0, 0, 0); 

     tr.SetPadding(0, 1, 0, 1); 
     tr.SetBackgroundColor(Color.Black); 
     tr.setClickable(true); 

     tr.setOnClickListener(tablerowOnClickListener);//add OnClickListener Here 

     tr.AddView(t); // add TextView to row. 


    } 
private OnClickListener tablerowOnClickListener = new OnClickListener() { 
     public void onClick(View v) { 
      //GET TEXT HERE 
      String currenttext = ((TextView)v).getText().toString()); 
     } 
    }; 
+0

如何我可以得到行的ID嗎? – arkmetal 2012-07-05 17:05:39

+0

爲什麼你需要行的id? – 2012-07-05 17:16:15

+0

看到我的編輯答案 – 2012-07-05 17:18:00

0

在錶行上的點擊偵聽器上設置。

tr.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      //TODO: 
     } 
    }); 
0

我發現了一些冷靜和它工作正常...

TableLayout tl=(TableLayout)findViewById(R.id.maintable); 

.... 

TableRow tr1 = new TableRow(this); 
tr1.setLayoutParams(newLayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); 



TextView textview1 = new TextView(this); 
textview1.setText(etFirstname.getText()); 
textview1.setPadding(5, 0, 0, 0); 
textview1.setTextColor(Color.YELLOW); 
textview1.setBackgroundColor(Color.GREEN); 
tr1.addView(textview1); 

TextView textview2 = new TextView(this); 
textview2.setText(etAge.getText()); 
//textview2.setText(etAge.getText()); 
textview2.setPadding(5, 0, 0, 0); 
textview2.setTextColor(Color.RED); 
textview2.setBackgroundColor(Color.GRAY); 
tr1.addView(textview2); 



tr1.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     TableRow tr1=(TableRow)v; 
     TextView tv1= (TextView)tr1.getChildAt(0); 

     Toast.makeText(getApplicationContext(),tv1.getText().toString(),Toast.LENGTH_SHORT).show(); 

    } 
}); 


tl.addView(tr1); 
0
/************ if table row is dynamic then this method else method 2 is perfect************/ 
//if we want to applay listener on dynamic tablerow then use this 
//sure that perfect 
TablRowe tr = new TableRow(this); 
tr.setClickable(true); 
tr.setId(100);// if in loop then add 1 counter with 100 like (100+counter) at end count++ it 
tr.setOnClickListener(this); 
@Override 
    public void onClick(View v) 
{ 
     switch (v.getId()) 
     { 
     case 100: 
       Toast.makeText(getApplicationContext(), "100", Toast.LENGTH_SHORT).show(); 
      break; 

     case 101: 
      Toast.makeText(getApplicationContext(), "101", Toast.LENGTH_SHORT).show(); 
      break; 
} 
/************************** for simple like this ************************/ 
    TableRow row1 = (TableRow)findViewById(R.id.row1); 
row1.setonClickListener(this); 
public void onClick(View v) 
{ 
switch (v.getId()) 
     { 
     case R.id.row1: 
      // do work 
      break; 
      }   
} 
+0

請花一點時間記錄您提供此代碼作爲答案的原因。爲什麼它是正確的;它有什麼不同? – rfornal 2014-12-24 19:10:15

+0

我thik,這是完美的 – sandhu 2014-12-27 20:56:50