2013-03-05 51 views
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對象中傳遞前言。 有沒有人知道這是如何做到的?

謝謝。

回答

1

使用您在錶行中顯示的內容映射一個哈希表(說報告ID)againsg報表對象

因此,像

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()中,絕對使用MyTableRow類代替TableRow,如 tableRow = new MyTableRow(this)並使用tableRow.setMethod(reportObject)設置Report。應該工作..

+0

是的,我想到了一些這樣的事情,但我認爲,有沒有辦法執行此操作沒有第三方對象。 – 2013-03-05 11:53:41

+0

實際上,我們可以@EmilAdz,我們需要拿出MyTableRow類來擴展TableRow類,然後添加一個Report類型的對象和一個方法來獲取和設置它.. – 2013-03-05 13:08:59

+0

這看起來像我的解決方案尋找,我會嘗試,並接受你的答案,如果這個工程。你可能有一個這樣的事情嗎? – 2013-03-05 13:35:22