Intereting Posts
Любая причина вообще направить блокировку бесплатного приложения? Мышь (или касание) события на холсте вызывает выбор с помощью HTML5, Phonegap и Android Android Studio: Gradle: ошибка: не удается найти символьную переменную Нарисуйте Rectangle Over ImageView для выделения, которое может быть уменьшено в андроиде Воспроизведение звука независимо от уровня громкости устройства Загрузите черновик APK без вмешательства в опубликованный APK? Ошибка INSTALL_FAILED_UID_CHANGED при установке приложения Как добавить отдельный элемент меню на панель инструментов в Android? Фиксированное соотношение сторон Eclipse медленно наращивает ресурсы Android Отправлять электронную почту с помощью объекта bitmap в качестве приложения в Android? Использование Emacs TRAMP с ssh-сервером, который не предоставляет / bin / sh? Выберите несколько контактов из телефонной книги в android Как я могу передавать музыку из файла внутри зашифрованного zip без распаковки всего файла? GCON канонический идентификатор

Как группировать элементы из базы данных и отображать их – Android

У меня есть модель квитанций и журналов в приложении для Android. Квитанция имеет много журналов.

Я сделал запрос для журналов group_by по sortID и классу.

//recieve RecepitID and query to group logs final long forwardedId = (long) getIntent().getExtras().get(String.valueOf("recepitID")); List<Logs> logsList = new Select().from(Logs.class).where("Receipt = " + forwardedId).groupBy("SortID, Grade").execute(); 

Эта группировка отлично работает. Проблема следующая. Мне нужно иметь такой вывод (часть в красном круге): Введите описание изображения здесь Но я понимаю:

Введите описание изображения здесь

И это часть кода, как я это сделал.

 public class LogsRecapitulation extends AppCompatActivity { private ListView mainListView; private BaseAdapter listAdapter; private TextView logsCount; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.recapitulation_listview); mainListView = (ListView) findViewById(R.id.ListViewItem); //recieve RecepitID and query to group logs final long forwardedId = (long) getIntent().getExtras().get(String.valueOf("recepitID")); List<Logs> logsList = new Select().from(Logs.class).where("Receipt = " + forwardedId).groupBy("SortID, Grade").execute(); TextView result = (TextView) findViewById(R.id.LogMassResult); double sum = 0.0; for (int i = 0; i < logsList.size(); i++) { sum += logsList.get(i).getM3(); } result.setText(String.format("%.2f m3", sum)); for (int i = 0; i < logsList.size(); i++) { if (logsList.get(i).receipt.priceType.equals("Na panju")) { TextView stumpPriceKN = (TextView) findViewById(R.id.sumPriceKN); double sumPricekn = 0.0; for (int j = 0; j < logsList.size(); j++) { sumPricekn += logsList.get(j).price.stumpPrice_kn * logsList.get(j).getM3(); } stumpPriceKN.setText(String.format("%.2f KN", sumPricekn)); } else { TextView roadKN = (TextView) findViewById(R.id.sumPriceKN); double roadPrKn = 0.0; for (int j = 0; j < logsList.size(); j++) { roadPrKn += logsList.get(j).price.roadPrice_kn * logsList.get(j).getM3(); } roadKN.setText(String.format("%.2f KN", roadPrKn)); } } for (int i = 0; i < logsList.size(); i++) { if (logsList.get(i).receipt.priceCorrection > 0 && logsList.get(i).receipt.priceType.equals("Na panju")) { TextView corecctionPriceKn = (TextView) findViewById(R.id.correctionPriceKN); double correcSumKN = 0.0; for (int j = 0; j < logsList.size(); j++) { correcSumKN += (logsList.get(j).price.stumpPrice_kn * logsList.get(j).getM3()) + ((logsList.get(j).price.stumpPrice_kn * logsList.get(j).getM3()) * logsList.get(j).receipt.priceCorrection / 100); } corecctionPriceKn.setText(String.format("%.2f KN", correcSumKN)); } else if (logsList.get(i).receipt.priceCorrection > 0 && logsList.get(i).receipt.priceType.equals("Šumska cesta")) { TextView corecctionPriceKn = (TextView) findViewById(R.id.correctionPriceKN); double correcSumKN = 0.0; for (int j = 0; j < logsList.size(); j++) { correcSumKN += (logsList.get(j).price.roadPrice_kn * logsList.get(j).getM3()) + ((logsList.get(j).price.roadPrice_kn * logsList.get(j).getM3()) * logsList.get(j).receipt.priceCorrection / 100); } corecctionPriceKn.setText(String.format("%.2f KN", correcSumKN)); } else { TextView priceHolder = (TextView) findViewById(R.id.KorekcijaCijene); TextView corecctionPriceKn = (TextView) findViewById(R.id.correctionPriceKN); priceHolder.setText(""); corecctionPriceKn.setText(""); } } listAdapter = new RecapitulationArrayAdapter(logsList); mainListView.setAdapter(listAdapter); //display logs count logsCount = (TextView) findViewById(R.id.logsCount); logsCount.setText(String.valueOf(logsList.size())); } private class RecapitulationArrayAdapter extends BaseAdapter { private LayoutInflater inflater; private List<Logs> logsList; public RecapitulationArrayAdapter(List<Logs> logsList) { inflater = LayoutInflater.from(LogsRecapitulation.this); this.logsList = logsList; } @Override public int getCount() { return logsList.size(); } @Override public Object getItem(int position) { return logsList.get(position); } @Override public long getItemId(int position) { return logsList.get(position).getId(); } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = inflater.inflate(R.layout.logs_recapitulation, parent, false); } Logs log = logsList.get(position); ((TextView) convertView.findViewById(R.id.rec_log_sort)).setText(log.sort_id); ((TextView) convertView.findViewById(R.id.rec_log_class)).setText(log.grade); ((TextView) convertView.findViewById(R.id.rec_log_count)).setText(String.valueOf(logsList.size())); ((TextView) convertView.findViewById(R.id.rec_logs_mass)).setText(String.format("%.2f m3", log.getM3())); if (log.receipt.priceType.equals("Na panju")) { ((TextView) convertView.findViewById(R.id.rec_log_price_default)).setText(String.valueOf(log.price.stumpPrice_kn)); } else { ((TextView) convertView.findViewById(R.id.rec_log_price_default)).setText(String.valueOf(log.price.roadPrice_kn)); } if (log.receipt.priceType.equals("Na panju")) { ((TextView) convertView.findViewById(R.id.rec_calculated_price)).setText(String.format("%.2f KN", log.price.stumpPrice_kn * log.getM3())); } else { ((TextView) convertView.findViewById(R.id.rec_calculated_price)).setText(String.format("%.2f KN", log.price.roadPrice_kn * log.getM3())); } return convertView; } } } 

Я использую ActiveAndroid и отображаю его в списке.

ПРОБЛЕМА – это отображение этих сгруппированных элементов. Я показываю их в списке BaseAdapter listView, и он показывает мне только один элемент для каждой группы, но мне нужно показать несколько элементов (потому что в каждой группе их больше 4).

Может ли кто-нибудь дать мне совет, что я должен сделать, чтобы получить результат, например, на первом изображении?

Solutions Collecting From Web of "Как группировать элементы из базы данных и отображать их – Android"

Похоже, вы пытаетесь получить результаты, похожие на следующий SQL:

 select sort, grade, count(grade), sum(mass), price from logs where receiptid = forwardedId group by sort, grade; 

Вы показываете отображаемый счет, вычисляемый как logList.size() . Вместо этого, если у вас будет группа базы данных, вам также нужно будет получить счетчик из базы данных.

Это может помочь и пара вещей. 1. Проверьте запрос SQL непосредственно к базе данных, чтобы убедиться, что вы начинаете с предполагаемого набора результатов. Вы можете использовать клиент sqlite3 для тестирования, предполагая, что вы используете SQLite db. 2. Включить ведение ActiveAndroid.initialize в ActiveAndroid.initialize

Также вы можете дважды проверить правописание параметров, чтобы убедиться, что вы ссылаетесь на предполагаемый параметр цели.

После того, как вы подтвердите правильность результатов запроса, вы можете сосредоточиться на том, будете ли вы отображать его в списке по своему усмотрению.

Наконец, будьте осторожны в работе над потоком пользовательского интерфейса.

Пользователь user650881 'прав (я не могу голосовать с репо <50).

Кроме того, чтобы получить сводку общей таблицы, вы можете выполнить следующий SQL-запрос:

 select /*sort, grade,*/ count(grade), sum(mass), price from logs where receiptid = forwardedId /*group by sort, grade*/; 

Если вы хотите иметь элементы, сгруппированные по разным полям, вы также можете попробовать вдова функции, то есть:

 select count(grade) over(partition by fieldName) 

И группа в конечном итоге не нужна