2015-10-19 57 views
1

我有一個回收站視圖,它使用遊標中的數據填充數組列表。數據未被綁定到回收站視圖

Cursor cursor = getCursor(getContext().getContentResolver(), messageUri); 
    mAdapter = new MessageAdapter(getContext(), Message_list); 
    while(cursor.moveToNext()){ 
     // The Cursor is now set to the right position 
     Message_list.add(Message.getMessage(getContext(), cursor)); 
    } 

    new Thread(new Runnable() { 
     @Override 
     public void run() { 

      getActivity().runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        mRecyclerView.setAdapter(mAdapter); 
        Log.d(TAG, "Size Before" + Message_list.size()); 
       } 
      }); 
     } 
    }).start(); 

這適用於正確插入數據。但是,當我向適配器插入一個新條目時,適配器將添加該行,但從隨機的上一行中加載值,即顯示在該行中的文本是來自項目數組列表中存在的另一行的文本。這裏是插入方法:

sendButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      String message = messageText.getText().toString(); 
      SmsManager smsManager = SmsManager.getDefault(); 
      smsManager.sendTextMessage(number, null, message, null, null); 
      Message messageSMS = new Message(); 
      messageSMS.setBody(message); 
      messageSMS.setAddress(number); 
      messageSMS.setDate(System.currentTimeMillis()); 
      Log.d(TAG, "" + messageSMS.getBody()); 
      Log.d(TAG, "Size After" + Message_list.size()); 
      mAdapter.add(messageSMS); 
      mRecyclerView.smoothScrollToPosition(Message_list.size()-1); 

     } 
    }); 

,這裏是在適配器內部add方法:

public void add(Message item) { 
    Message_list.add(Message_list.size()-1, item); 
    notifyItemInserted(Message_list.size() - 1); 
} 

預先感謝幫助!

+0

使用本[適配器(https://gist.github.com/Shywim/127f207e7248fe48400b) – pskink

+0

@pskink我使用一個數組列表 – GibranG

+0

,這是錯誤的做法,如果使用一個'ListView'(而不是'RecyclerView')你會使用'ArrayAdapter'還是'CursorAdapter'? – pskink

回答

0

而不是notifyItemInserted只需使用notifyDataSetChanged()將項目添加到Message_list後。

請參閱Document Here

+0

這沒有任何影響。 – GibranG

+0

在您的適配器中使用固定器。 –

+0

我也在使用視圖模式,它是一個回收視圖。 – GibranG