2013-03-05 1 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); 
    } 
} 

так, что мне нужно здесь, когда строка щелкнула я должен найти его в списке и получить идентификатор отчета, который кликнул в таблице и поместить в объект «Карта», чтобы передать предисловие. Кто-нибудь знает, как это можно сделать?

спасибо.

ответ

1

Используйте хэш-таблицу, которая отображает содержимое, которое показывают в строке таблицы (скажем, идентификатор отчета) againsg отчета Object

Так что-то вроде

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

OnClick на строке таблицы, удалось получить отчет идентификатор и в свою очередь, посмотреть его этот Hashtable вы поддерживаете на уровне класса или где доступны ..

Edit (код блока)

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) для установки отчета. должен работать ..

+0

Да, я подумал о чем-то подобном, но я думаю, есть ли способ выполнить эту операцию без стороннего объекта. –

+0

На самом деле, мы можем @EmilAdz, нам нужно придумать класс MyTableRow, расширяющий класс TableRow, а затем добавить объект типа Report и метод для его получения и установки по желанию. –

+0

это похоже на решение, которое я ищу, я попробую это и приму ваш ответ, если это сработает. возможно, у вас есть пример, который делает что-то вроде этого? –

Смежные вопросы