0

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

したがって、ここで必要なのは、行がクリックされたときに、リストでその行を見つけて、テーブルでクリックされたレポートの ID を取得し、Map オブジェクトに入れて序文を渡す必要があるということです。これを行う方法を知っている人はいますか?

ありがとう。

4

1 に答える 1

1

テーブル行に表示するコンテンツ (レポート ID など) をレポート オブジェクトにマップするハッシュテーブルを使用します。

だから何か

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

テーブル行をonClickし、レポート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() では、tableRow = new MyTableRow(this) のように TableRow の代わりに MyTableRow クラスを使用し、tableRow.setMethod(reportObject) を使用してレポートを設定します。動作するはず..

于 2013-03-05T10:54:04.410 に答える