У меня есть просмотрщик, который заполняется списком массивов, используя данные из курсора.Данные не привязаны к просмотру 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);
}
Заранее спасибо за помощь!
использовать этот [адаптер] (https://gist.github.com/Shywim/127f207e7248fe48400b) – pskink
@pskink Я использую список массива – GibranG
и это неправильный подход, если вы использовали «ListView» (вместо «RecyclerView») вы бы использовали «ArrayAdapter» или «CursorAdapter»? – pskink