Почему в моем приложении для Android отображаются две кнопки, когда я объявил только одну в макете

Я хочу добавить к ответу Майкла Берковски, что это также может произойти, если порядок массива будет отменен, и в этом случае немного сложнее наблюдать эту проблему, потому что в объекте json порядок будет упорядочен по возрастанию.

Например:

[
    3 => 'a',
    2 => 'b',
    1 => 'c',
    0 => 'd'
]

Вернет:

{
    0: 'd',
    1: 'c',
    2: 'b',
    3: 'a'
}

Таким образом, решение в этом случае должно использовать array_reverse перед его кодировкой json

0
задан hippoman 13 March 2019 в 18:41
поделиться

1 ответ

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);
0
ответ дан Red 13 March 2019 в 18:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: