2013-01-03 88 views
0

當我使用它時,我對這個適配器元素(NotifyDataSetChanged)有點困惑,因爲我的listview沒有更新。Android NotifyDataSetChanged和BaseAdapter

我的工作場景: 首先創建了一個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」我的列表視圖更新,但預期它會再次重新綁定的列表視圖的位置再次進入零。

這就是我的邏輯之前,但隨後我發現,如果我有一長串項目?這不會是合適的和用戶友好的,因爲用戶必須再次向下滾動,找到項目(S),他/她希望更新

所以香港專業教育學院瞭解到NotifyDataSetChanged,再次創造了一個空白爲

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」。

我的主要問題是我的listview沒有更新。我很確定我的orderList具有更新的值,因爲使用調試器和斷點我期望的數據是預期的。這是爲什麼?

請隨時推薦建議或意見。如果你想看到我的基本適配器請把它說出來..

在此先感謝

回答

2

您正在創建一個新的列表和ArrayAdapter所以notifyDataSetChanged()沒有任何作用,orderAdapter不再引用了您的ListView適配器。你有兩個選擇:

  1. 呼叫setAdapter()NotifyDataChangedOrderListSorted()方法:

    ... 
    orderAdapter =new OrderListAdapter(this, orderList,context, sort); 
    listViewSearchPanel.setAdapter(orderAdapter); 
    

    但是,這等同於bindOrderListSorted()

  2. 重用orderListorderAdapter

    private void NotifyDataChangedOrderListSorted(String sort){ 
        orderList.clear(); // Change this 
        mySQLiteAdapter = new SQLiteAdapter(context); 
        mySQLiteAdapter.openToRead(); 
    
        ... 
        cursor.close(); 
        mySQLiteAdapter.close(); 
        orderAdapter.notifyDataSetChanged(); // Change this 
    
    } 
    

但是真的您應該使用CursorAdapter,因爲它們更快更小......但這取決於您。

+0

我使用編號2 @Sam – Androyds

+0

感謝您的回答。它正在工作。我讀了光標適配器以供將來參考..感謝您解決我的問題 – Androyds

+0

很高興我能幫助,祝你好運! – Sam

相關問題