Android Can';无法在onClick()方法中计算强制转换

Android Can';无法在onClick()方法中计算强制转换,android,casting,onclick,row,android-tablelayout,Android,Casting,Onclick,Row,Android Tablelayout,我已经写了一个应用程序,旨在显示报告。应用程序的第一个屏幕是一个表,显示报告的信息(名称、路径) 因此,我想使表中的行可以单击,以便将我带到下一个屏幕,在那里显示报告的详细信息,并了解该行对应的报告是什么。所以我写了自己的一行: 表格报告行: public class TableReportRow extends TableRow { Report report; public TableReportRow(Context context, Report report) {

我已经写了一个应用程序,旨在显示报告。应用程序的第一个屏幕是一个表,显示报告的信息(名称、路径)

因此,我想使表中的行可以单击,以便将我带到下一个屏幕,在那里显示报告的详细信息,并了解该行对应的报告是什么。所以我写了自己的一行:

表格报告行:

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);
    }
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.reports\u list\u activity\u layout);
application=(SGRaportManagerAppObj)getApplication();
reportsRepository=application.reportsRepository.getReportsRepository();
TableLayout table=(TableLayout)findViewById(R.id.tableReportsList);
表.SetStretCharl列(真);
表.setShrinkAllColumns(真);
最后一个字符串tag=“tag”;
对于(int i=0;i

现在我需要在
onClick()
中对视图执行强制转换,以获得对
GetReport()的访问权
方法获取该行的实际对应报告,但我似乎无法正确获取该报告。是否有人可以帮助我完成此操作?如果有任何帮助,我们将不胜感激。

您可以将其强制转换为TableReportRow。调用onClick时,侦听器附加到的视图将作为参数传入


这很有用,因为它允许为多个按钮循环使用同一个侦听器,并且您可以识别视图上的操作(基于文本、内容、id等)。

您可以将其强制转换为TableReportRow。调用onClick时,将侦听器附加到的视图作为参数传入


这很有用,因为它允许为多个按钮循环使用同一个侦听器,并且您可以识别视图上的操作(基于文本、内容、id等)。

onClick事件中的视图参数是处理程序绑定到的视图。因此,在您的情况下,它将是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();
    }
});

onClick事件中的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();
    }
});

我会猜测as Report result=((TableReportRow)v).getReport();-或者这太明显了?出于某种原因,eclipse会在清理之前给我错误,但你说得对,我的错。我会猜测as Report result=((TableReportRow)v).getReport();-或者这太明显了?出于某种原因,eclipse会在清理之前给我错误,但你说得对,我的错。getVirtualChildCount()会为我产生什么?什么都没有。这只是一个例子,你可以将TableReportRow实例上的方法“作为”TableReportRow实例调用getVirtualChildCount()是什么;将为我生成?无..这只是一个示例,您可以将TableReportRow实例上的方法“作为”TableReportRow实例调用