2015-10-19 3 views
1

У меня есть просмотрщик, который заполняется списком массивов, используя данные из курсора.Данные не привязаны к просмотру recycler

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); 

     } 
    }); 

А вот способ добавить внутри адаптера:

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

Смежные вопросы