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实例调用