我对这个适配器元素(NotifyDataSetChanged)有点困惑,因为当我使用它时,我的列表视图没有更新。
我的工作场景:首先我创建了一个 void,这样每当我更新 listview 项目上的某些内容时,我就可以再次调用我的 void。
private void bindOrderListSorted(String sort){
orderList = new ArrayList<Order>();
mySQLiteAdapter = new SQLiteAdapter(context);
mySQLiteAdapter.openToRead();
String selectQuery = "MY QUERY...";
Cursor cursor =mySQLiteAdapter.read(selectQuery);
while(cursor.moveToNext())
{
Order order = new Order();
order.orderdDesc = cursor.getString(0);
order.orderitemCode = cursor.getString(1);
order.orderitemID = cursor.getString(2);
order.orderPrice = cursor.getString(3);
order.qtyOrdered = cursor.getString(4);
order.stocksQty = cursor.getString(5);
orderList.add(order);
}
cursor.close();
mySQLiteAdapter.close();
orderAdapter =new OrderListAdapter(this, orderList,context, sort);
listViewSearchPanel.setAdapter(orderAdapter);
}
关于这个的主要问题是,每当我更新我的数据库中的某些内容并调用“bindOrderListSorted”时,我的列表视图都会更新,但正如预期的那样,它会再次重新绑定,列表视图的位置再次变为零。
那是我之前的逻辑,但后来我发现,如果我有很长的项目清单怎么办?这将不适合和用户友好,因为用户必须再次向下滚动才能找到他/她希望更新的项目
所以我了解了 NotifyDataSetChanged 并为此再次创建了一个 void
private void NotifyDataChangedOrderListSorted(String sort){
orderList = new ArrayList<Order>();
mySQLiteAdapter = new SQLiteAdapter(context);
mySQLiteAdapter.openToRead();
String selectQuery = "MY QUERY... SAME AS BEFORE";
Cursor cursor =mySQLiteAdapter.read(selectQuery);
while(cursor.moveToNext())
{
Order order = new Order();
order.orderdDesc = cursor.getString(0);
order.orderitemCode = cursor.getString(1);
order.orderitemID = cursor.getString(2);
order.orderPrice = cursor.getString(3);
order.qtyOrdered = cursor.getString(4);
order.stocksQty = cursor.getString(5);
orderList.add(order);
}
cursor.close();
mySQLiteAdapter.close();
orderAdapter =new OrderListAdapter(this, orderList,context, sort);
orderAdapter.notifyDataSetChanged();
}
并在我更新某些内容时调用“NotifyDataChangedOrderListSorted”。
我的主要问题是我的列表视图没有更新。我很确定我的 orderList 具有更新的值,因为使用调试器和断点我期望的数据是预期的。这是为什么?
请随时提出建议或意见。如果您想查看我的基本适配器,请这样说..
提前致谢