查找列出已单击的表格布局行的列表项:

时间:2013-03-05 10:29:14

标签: android list onclick android-tablelayout

我有一个包含TableLayout的活动。我正在通过列表中的数据以编程方式填充此表:

我需要做的是让每一行都可以点击,当它点击时我需要在列表中找到相应的项目,这样我就可以从中获取额外的数据,这是我的onCreate代码:

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

    for (Report tempReport : reportsRepository)
    {
        TableRow row = new TableRow(this);
        row.setClickable(true);
        TextView tvName = new TextView(this);
        tvName.setText(tempReport.getName());
        tvName.setGravity(Gravity.CENTER_HORIZONTAL);
        tvName.setTextColor(getResources().getColor(R.color.my_black));  
        row.addView(tvName);
        TextView tvPath = new TextView(this);
        tvPath.setText(tempReport.getPath());
        tvPath.setGravity(Gravity.CENTER_HORIZONTAL);
        tvPath.setTextColor(getResources().getColor(R.color.my_black));
        row.addView(tvPath);
        row.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) 
            {
                Map<String, String> map = new HashMap<String, String>();
                map.put(Report.JSON_KEY_ID, );
            }
        });
        table.addView(row);   
    }
}

所以我需要的是当单击该行时我需要在列表中找到它并获取在表中单击并放入Map对象以传递前言的报告的ID。 有谁知道如何做到这一点?

感谢。

1 个答案:

答案 0 :(得分:1)

使用哈希表来映射您在表格行中显示的内容(比如报告ID)再次报告对象

类似

Hashtable map = new Hashtable();
...
map.put(report.getId(), report);

onClick on table row,设法获取报告ID,然后查找您在类级别或某处可访问的哈希表。

编辑(代码块)

class MyTableRow extends TableRow{

    Object report = null;
    public MyTableRow(Context context) {
        super(context);
    }

    public Object getReport() {
        return report;
    }

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

在你的活动的onCreate()中,jus使用MyTableRow类代替TableRow tableRow = new MyTableRow(this)并使用tableRow.setMethod(reportObject)来设置Report。应该工作..