Несмотря на то, что, вероятно, есть ловушки, чтобы вы могли взглянуть на представление элемента, которое присоединяется к 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
.
Как насчет этого?
Integer[] ints = new Integer[] {1,2,3,4,5};
List<Integer> list = Arrays.asList(ints);
С другой стороны, можно использовать IntList
как тип и IntLists
фабрика от [1 113] Наборы Eclipse для создания набора непосредственно из массива int
значения. Это устраняет необходимость любой упаковки int
к Integer
.
IntList intList1 = IntLists.mutable.with(1,2,3,4,5);
int[] ints = new int[] {1,2,3,4,5};
IntList intList2 = IntLists.mutable.with(ints);
Assert.assertEquals(intList1, intList2);
Наборы Eclipse имеет поддержку изменяемого и неизменного примитива List
, а также Set
, Bag
, Stack
и Map
.
Примечание: Я - разработчик для Наборов Eclipse.
В Java нет такой вещи, как List
- дженерики не поддерживают примитивы.
Автобоксирование происходит только для одного элемента, а не для массивов примитивов.
Что касается того, как это исправить - существуют различные библиотеки с кучей методов для подобных вещей. Нет никакого способа обойти это, и я не думаю, что есть что-нибудь, что упростило бы это в JDK. Некоторые будут обернуть примитивный массив в список типа оболочки (так, чтобы упаковка происходила при доступе), другие будут перебирать исходный массив для создания независимой копии, упаковывая по ходу. Убедитесь, что вы знаете, что используете.
(EDIT: I ' d предполагал, что начальная точка int []
не подлежит обсуждению. Если вы можете начать с Integer []
, тогда вам далеко :)
Только для одного примера вспомогательной библиотеки и немного для подключения Guava , там com.google.common.primitive.Ints.asList
.
Поскольку массивы java являются объектами, а Arrays.asList ()
обрабатывает ваш массив int как единственный аргумент в списке varargs.
Проблема не в Arrays.asList ()
. Проблема в том, что вы ожидаете, что автобокс будет работать с массивом - а это не так. В первом случае компилятор автоматически упаковывает отдельные целые числа перед тем, как посмотреть, для чего они используются. Во втором случае вы сначала помещаете их в массив int (автобоксирование не требуется), а затем передаете его в Arrays.asList ()
(автобоксинг невозможен).
Если вы передадите int []
в Arrays.asList ()
, созданный список будет List
, которого нет в java, а не правильный List
.
Я думаю, вы ожидаете, что Arrays.asList ()
автоматически упакует ваши ints , чего, как вы видели, не будет.
Невозможно преобразовать 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;
}