Arrays.asList () не работающий, как это должно?

Несмотря на то, что, вероятно, есть ловушки, чтобы вы могли взглянуть на представление элемента, которое присоединяется к RecyclerView (возможно, RecyclerView # OnChildAttachStateChangeListener , но я не изучал его) думаю, что было бы лучше просто назначить параметры макета в onCreateViewHolder() следующим образом:

@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    Button b= new Button(parent.getContext());
    ViewGroup.LayoutParams lp =
        new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    tv.setLayoutParams(lp);
    return new ItemViewHolder(b);
}

Параметры макета будут затем обрабатываться при добавлении элемента представления в RecyclerView.

53
задан Stephen C 21 July 2018 в 16:08
поделиться

7 ответов

Как насчет этого?

Integer[] ints = new Integer[] {1,2,3,4,5};
List<Integer> list = Arrays.asList(ints);
29
ответ дан 7 November 2019 в 08:23
поделиться

В Java нет такой вещи, как List - дженерики не поддерживают примитивы.

Автобоксирование происходит только для одного элемента, а не для массивов примитивов.

Что касается того, как это исправить - существуют различные библиотеки с кучей методов для подобных вещей. Нет никакого способа обойти это, и я не думаю, что есть что-нибудь, что упростило бы это в JDK. Некоторые будут обернуть примитивный массив в список типа оболочки (так, чтобы упаковка происходила при доступе), другие будут перебирать исходный массив для создания независимой копии, упаковывая по ходу. Убедитесь, что вы знаете, что используете.

(EDIT: I ' d предполагал, что начальная точка int [] не подлежит обсуждению. Если вы можете начать с Integer [] , тогда вам далеко :)

Только для одного примера вспомогательной библиотеки и немного для подключения Guava , там com.google.common.primitive.Ints.asList .

74
ответ дан 7 November 2019 в 08:23
поделиться

Поскольку массивы java являются объектами, а Arrays.asList () обрабатывает ваш массив int как единственный аргумент в списке varargs.

15
ответ дан 7 November 2019 в 08:23
поделиться

Проблема не в Arrays.asList () . Проблема в том, что вы ожидаете, что автобокс будет работать с массивом - а это не так. В первом случае компилятор автоматически упаковывает отдельные целые числа перед тем, как посмотреть, для чего они используются. Во втором случае вы сначала помещаете их в массив int (автобоксирование не требуется), а затем передаете его в Arrays.asList () (автобоксинг невозможен).

5
ответ дан 7 November 2019 в 08:23
поделиться

Если вы передадите int [] в Arrays.asList () , созданный список будет List , которого нет в java, а не правильный List .

Я думаю, вы ожидаете, что Arrays.asList () автоматически упакует ваши ints , чего, как вы видели, не будет.

2
ответ дан 7 November 2019 в 08:23
поделиться

Невозможно преобразовать int [] в Integer [] , вам нужно скопировать значения


int[] tab = new int[]{1, 2, 3, 4, 5};
List<Integer> list = ArraysHelper.asList(tab);

public static List<Integer> asList(int[] a) {
    List<Integer> list = new ArrayList<Integer>();
    for (int i = 0; i < a.length && list.add(a[i]); i++);
    return list;
}
2
ответ дан 7 November 2019 в 08:23
поделиться
Другие вопросы по тегам:

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