2015-03-30 4 views
1

Моя цель - получить данные из БД, а затем отобразить их как таблицу в моем приложении.Android: Dynamic TableLayout

Вот мой код:

public void updateLastExpenses(){ 
    Cursor c = Expense.getAll(this); 

    TableLayout lastExpensesTable = (TableLayout)findViewById(R.id.lastExpensesTable); 

    lastExpensesTable.setStretchAllColumns(true); 

    while (c.moveToNext()) { 

     String name = c.getString(
       c.getColumnIndexOrThrow(ExpenseContract.ExpenseEntry.COLUMN_NAME_NAME) 
     ); 
     float amount = c.getFloat(
       c.getColumnIndexOrThrow(ExpenseContract.ExpenseEntry.COLUMN_NAME_AMOUNT) 
     ); 

     String date = c.getString(
       c.getColumnIndexOrThrow(ExpenseContract.ExpenseEntry.COLUMN_NAME_DATE) 
     ); 

     TableRow tr = new TableRow(this); 

     TextView c1 = new TextView(this); 
     c1.setText(name); 
     c1.setBackgroundColor(Color.RED); 

     TextView c2 = new TextView(this); 
     c2.setText(""+amount); 
     c2.setBackgroundColor(Color.BLUE); 


     tr.addView(c1); 
     tr.addView(c2); 

     lastExpensesTable.addView(tr); 

    } 

} 

А вот мой TableLayout:

<TableLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/lastExpensesTable"> 
      <TableRow 
       android:id="@+id/lastExpensesTableRow" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content"> 
       <TextView 
        android:id="@+id/lastExpensesTableName" 
        android:text="@string/last_expenses_table_name"/> 
       <TextView /> 
       <TextView 
        android:id="@+id/lastExpensesTableAmount" 
        android:text="@string/last_expenses_table_amount"/> 
       <TextView /> 
      </TableRow> 
     </TableLayout> 

Но вот результат:

enter image description here

Вы знаете, почему содержание все в столбце «имя» и не разделяется между двумя столбцами? Есть ли более чистый способ сделать это (используя макет и избегая стилизации в файле .java, я думаю?)

Заранее спасибо.

ответ

1

У вас есть матрас TextView в вашем расположении.

<TableLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/lastExpensesTable"> 
     <TableRow 
      android:id="@+id/lastExpensesTableRow" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 
      <!-- first column --> 
      <TextView 
       android:id="@+id/lastExpensesTableName" 
       android:text="@string/last_expenses_table_name"/> 
      <!-- second column --> 
      <TextView /> 
      <!-- third column --> 
      <TextView 
       android:id="@+id/lastExpensesTableAmount" 
       android:text="@string/last_expenses_table_amount"/> 
     </TableRow> 
    </TableLayout> 

Вынимают, что TextView с пометкой «второй столбец» и вы весь набор.

+0

Спасибо за ваш ответ. Тем не менее, ваше решение не очень хорошее. Вы можете видеть заголовки таблиц (имя и количество), используя всю ширину устройства. Проблема в том, что значение (динамическое) все помещено в столбец «имя». – Vico

+0

Ну, у вас был дополнительный пустой TextView в вашем макете между двумя помеченными TextViews, я взял это в своем ответе. Добавляли ли вы заголовки с помощью findViewById()? Если вы это сделали, вы помещаете заголовок «Сумма» в третий столбец, а не второй. Но поскольку вы использовали addView для данных, суммы выходили во втором столбце, как вы ожидали. Извините, я должен был указать на это, мне не приходило в голову, что это была проблема, которую вы пытались решить. –

+0

Нет заголовка, добавленного непосредственно в файл макета, это «@ + id/lastExpensesTableAmount» и «» @ + id/lastExpensesTableName ». Затем я получаю таблицу благодаря« @ + id/lastExpensesTable »и пытаюсь добавить новые строки программно. Весь мой код указан в моем сообщении. Еще раз спасибо – Vico