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>
Но вот результат:
Вы знаете, почему содержание все в столбце «имя» и не разделяется между двумя столбцами? Есть ли более чистый способ сделать это (используя макет и избегая стилизации в файле .java, я думаю?)
Заранее спасибо.
Спасибо за ваш ответ. Тем не менее, ваше решение не очень хорошее. Вы можете видеть заголовки таблиц (имя и количество), используя всю ширину устройства. Проблема в том, что значение (динамическое) все помещено в столбец «имя». – Vico
Ну, у вас был дополнительный пустой TextView в вашем макете между двумя помеченными TextViews, я взял это в своем ответе. Добавляли ли вы заголовки с помощью findViewById()? Если вы это сделали, вы помещаете заголовок «Сумма» в третий столбец, а не второй. Но поскольку вы использовали addView для данных, суммы выходили во втором столбце, как вы ожидали. Извините, я должен был указать на это, мне не приходило в голову, что это была проблема, которую вы пытались решить. –
Нет заголовка, добавленного непосредственно в файл макета, это «@ + id/lastExpensesTableAmount» и «» @ + id/lastExpensesTableName ». Затем я получаю таблицу благодаря« @ + id/lastExpensesTable »и пытаюсь добавить новые строки программно. Весь мой код указан в моем сообщении. Еще раз спасибо – Vico