Я хочу добавить к ответу Майкла Берковски, что это также может произойти, если порядок массива будет отменен, и в этом случае немного сложнее наблюдать эту проблему, потому что в объекте json порядок будет упорядочен по возрастанию.
Например:
[
3 => 'a',
2 => 'b',
1 => 'c',
0 => 'd'
]
Вернет:
{
0: 'd',
1: 'c',
2: 'b',
3: 'a'
}
Таким образом, решение в этом случае должно использовать array_reverse
перед его кодировкой json
blockquote>
SimpleCursorAdapter adapter; adapter = new SimpleCursorAdapter( this, R.layout.activity_main, c, columns, views, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
Вы определили макет своей основной деятельности как макет, который адаптер курсора будет использовать для создания внешнего вида каждого элемента в списке. https://developer.android.com/reference/android/widget/SimpleCursorAdapter.html#SimpleCursorAdapter (android.content.Context,% 20int,% 20android.database.Cursor,% 20java.lang.String [], % 20int [],% 20int)
Результат: кнопка и текстовые представления будут реплицироваться для каждого элемента в представлении списка. Ваша проблема не так проста, как две кнопки. Для каждого имеющегося у вас контакта будут созданы кнопка, представление списка и 2 просмотра текста, в то время как для каждого контакта вам потребуется только 2 просмотра текста.
Простое решение: создайте новый XML-файл, содержащий только текстовые представления, необходимые для отображения имени и идентификатора контакта, и предоставьте его адаптеру в качестве макета.
Список элементов списка:
//list_item.xml <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".Debug1ListItem"> <TextView android:id="@+id/contactName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="8dp" android:layout_marginTop="8dp" android:layout_marginEnd="8dp" android:text="TextView" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/contactID" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="8dp" android:layout_marginTop="8dp" android:layout_marginEnd="8dp" android:text="TextView" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/contactName" /> </android.support.constraint.ConstraintLayout>
Конструкция адаптера:
SimpleCursorAdapter adapter; adapter = new SimpleCursorAdapter( this, R.layout.list_item, c, columns, views, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);