#android #sqlite #swiperefreshlayout
#Android #sqlite #swiperefreshlayout
Вопрос:
Я использую макет обновления салфеткой для загрузки данных из локального sqlite, я установил ограничение 2 и смещение как 0, когда список обновляется, данные не обновляются, я не знаю, почему это не работает, может кто-нибудь помочь мне исправить это.
База данных:
public ArrayList<TransactionSum> getAllTransactionList(int offset) {
ArrayList<TransactionSum> transactionsum = new ArrayList<TransactionSum>();
String selectquery = "SELECT tid,SUM(totalamount) as 'total',strftime('%m-%Y', tdate) as 'month' FROM " TRANSACTION_LABELS " WHERE tdate BETWEEN (select min(tdate) from transactionlabel) AND (select max(tdate) from transactionlabel) GROUP BY strftime('%m-%Y', tdate) ORDER BY strftime('%m-%Y', tdate) DESC LIMIT " 2 " OFFSET " offset " ";
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(selectquery, null);
if (cursor.moveToFirst()) {
do {
TransactionSum transactiontotal = new TransactionSum();
transactiontotal.setId(cursor.getString(0));
transactiontotal.setTotalamount(cursor.getString(1));
transactiontotal.setMonth(cursor.getString(2));
transactionsum.add(transactiontotal);
} while (cursor.moveToNext());
}
cursor.close();
db.close();
return transactionsum;
}
Активность:
@Override
public void onRefresh() {
fetchList();
}
private void fetchList() {
swipeRefreshLayout.setRefreshing(true);
databaseHandlerOtherChgs=new DatabaseHandlerOtherChgs(getApplicationContext());
transactionitems=new ArrayList<TransactionSum>();
transactionitems=databaseHandlerOtherChgs.getAllTransactionList(offSet);
adapter = new TransactionListNewAdapter(this, transactionitems);
for(int i=offSet;i<transactionitems.size();i ){
offSet=offSet i;
}
adapter.notifyDataSetChanged();
swipeRefreshLayout.setRefreshing(false);
}
Комментарии:
1. Я думаю, что в вашем запросе Sqlite ошибка опечатки, измените » 2 » на » «2» »
2. Хорошо, но как мне обновить список с новым набором данных в нем
3. Попробуйте установить смещение 0 при обновлении списка.
4. сэр, вы работали над анимацией сворачивания ячеек. Сначала я устал, поскольку было дано, что он работает нормально. Но когда я добавил представление списка внутри макета содержимого. Ячейка расширяется, но не сворачивается
Ответ №1:
Вы создаете совершенно новый адаптер каждый раз, когда получаете обновление списка, но вы никогда ничего не делаете с этим адаптером. Вы должны установить его в представлении ( ListView
, `RecyclerView’, какой бы вы ни использовали).
Или вы можете добавить метод TransactionListAdapter
, позволяющий изменять данные в нем, и использовать этот метод вместо постоянного создания новых адаптеров.
public void setTransactionList(ArrayList<TransactionSum> newList) {
mList = newList;
notifyDataSetChanged();
}
Комментарии:
1. но где я должен использовать этот фрагмент кода либо в моем классе адаптера, либо в моей деятельности, либо в базе данных
2. @RameshR Всякий раз, когда вы загружаете новый список. Вам нужно предоставить адаптеру новый список, иначе как он может отображать эти элементы? (Или вам нужно предоставить
ListView
новый созданный вами адаптер, иначе как он может отображать эти элементы?)3. как мне увеличить смещение при его перемещении, а также как я мог бы найти общее количество записей в этой таблице
4. @RameshR в вашем вопросе недостаточно информации о том, как структурированы ваши данные и т.д. чтобы кто-то другой создал логику для вас. Вы спросили, почему список не был обновлен, и это потому, что вам
ListView
нужен правильный адаптер с правильными данными. Если у вас есть еще вопросы по другим аспектам этой проблемы, задайте новый вопрос, а не объединяйте их в этот.