2013-03-11 38 views
0

我寫了一個旨在顯示報告的應用程序。該應用程序的第一個屏幕是一個顯示報告的信息(名稱,路徑)的表格。找不到在onClick()方法中投射

所以,我想讓表格的行可點擊,以便帶我進入顯示報表詳細信息的下一個屏幕,並知道該行的相應報表是什麼。所以我寫了我自己的行:

TableReportRow:

public class TableReportRow extends TableRow { 

    Report report; 

    public TableReportRow(Context context, Report report) { 
     super(context); 
     this.report = report; 
    } 

    public Report getReport() { 
     return report; 
    } 

    public void setReport(Report report) { 
     this.report = report; 
    } 
} 

然後我創建的表編程:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.reports_list_activity_layout); 
    application = (SGRaportManagerAppObj)getApplication(); 
    reportsRepository = application.reportsRepository.getReportsRepository(); 
    TableLayout table = (TableLayout) findViewById(R.id.tableReportsList); 
    table.setStretchAllColumns(true); 
    table.setShrinkAllColumns(true); 
    final String tag = "tag"; 

    for (int i= 0; i < reportsRepository.size(); i++) { 
     Report tempReport = reportsRepository.get(i); 
     TableReportRow row = new TableReportRow(this, tempReport); 
     // ... 

     row.addView(tvName); 
     row.addView(tvPath); 
     row.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // This is where I need help. 
      } 
     }); 
     table.addView(row); 
    } 

現在我需要執行鑄造的視圖onClick()得到訪問GetReport()方法來獲取行的實際相應報告,但我似乎無法做到。有人能幫我解決這個問題嗎?任何幫助,將不勝感激。

+5

我猜的報告結果=((TableReportRow)V ).getReport(); - 或者這太明顯了? – 2013-03-11 21:47:50

+0

由於某種原因,日食會給我在清理前的錯誤,但你是正確的,我的壞。 – 2013-03-11 22:26:26

回答

1

的onClick事件中的View參數是處理程序綁定的View。所以你的情況這將是TableReportRow的一個實例,因此:

row.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     TableReportRow local = (TableReportRow) v; 
    } 
}); 

或者外部塊定義行作爲最後:

final TableReportRow row = new TableReportRow(this, tempReport); 
... 
row.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     // row is in scope here 
     row.getVirtualChildCount(); 
    } 
}); 
+0

getVirtualChildCount();會爲我生產嗎? – 2013-03-11 22:27:45

+0

Nothing ..這只是一個示例,您可以調用TableReportRow實例「AS」上的方法調用TableReportRow實例 – 2013-03-12 22:47:06

2

您可以將其轉換爲TableReportRow。當onClick被調用時,監聽器所附的視圖會作爲參數傳入。

這是有用的,因爲它允許相同的偵聽器可循環多次的按鈕,你可以找出對視圖進行操作(基於文本,內容,ID等)

1
TableReportRow row = new TableReportRow(this, tempReport); 
row.setId(i);//set an id for this. 
//... 
row.setOnClickListener(new View.OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
         TableReportRow myRow=(TableReportRow)v; 
         int id=myRow.getId();//your id. 
         myRow.getReport();//yourReport 
      } 
     } 
    }); 
相關問題