2016-02-06 2 views
-1

У меня есть табличный макет с динамически добавленными строками таблицы из базы данных. Мне нужно программно выбрать только одну строку таблицы и отменить выбор предыдущего выбранного. Подобно listview onItemClick. По некоторым причинам я не могу использовать ListView.Выберите только одну строку таблицы и снимите отметку с других

ответ

0

Вы можете добавить прослушиватель кликов в строках таблицы. См. Код ниже:

private int selectedIndex = -1; 

private TableLayout tableLayout; 

private void initTableLayout() { 
    View.OnClickListener clickListener = new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Integer index = (Integer) v.getTag(); 
      if (index != null) { 
       selectRow(index); 
      } 
     } 
    }; 

    tableLayout = (TableLayout) findViewById(R.id.table_layout); 
    final TableRow tr = new TableRow(this); 
    tr.setTag(0); 
    tr.setOnClickListener(clickListener); 

    // Add views on tr 

    tableLayout.addView(tr, 0, new TableLayout.LayoutParams(
      TableRow.LayoutParams.MATCH_PARENT, 
      TableRow.LayoutParams.WRAP_CONTENT)); 

    final TableRow tr2 = new TableRow(this); 
    tr2.setTag(1); 
    tr2.setOnClickListener(clickListener); 

    // Add views on tr2 

    tableLayout.addView(tr2, 1, new TableLayout.LayoutParams(
      TableRow.LayoutParams.MATCH_PARENT, 
      TableRow.LayoutParams.WRAP_CONTENT)); 

    .... 

} 

private void selectRow(int index) { 
    if (index != selectedIndex) { 
     if (selectedIndex >= 0) { 
      deselectRow(selectedIndex); 
     } 
     TableRow tr = (TableRow) tableLayout.getChildAt(index); 
     tr.setBackgroundColor(Color.GRAY); // selected item bg color 
     selectedIndex = index; 
    } 
} 

private void deselectRow(int index) { 
    if (index >= 0) { 
     TableRow tr = (TableRow) tableLayout.getChildAt(index); 
     tr.setBackgroundColor(Color.TRANSPARENT); 
    } 
} 
Смежные вопросы