В пределах RecyclerView
я создаю новые CustomView
s и затем устанавливаю их параметры макета, например:
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
CustomView customView= new CustomView(parent.getContext() /*, ...otherCustomArgs*/);
customView.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT
));
// ...
}
Теперь я заметил, что существует довольно много конструкторов дляLinearLayout
- класс, из которого расширяется мой CustomView
.
/**
{@link LinearLayout(Context)}
{@link LinearLayout(Context, AttributeSet)}
{@link LinearLayout(Context, AttributeSet, int)}
{@link LinearLayout(Context, AttributeSet, int, int)}
*/
Теперь, очевидно, существует стандартный способ передачи ширины / высоты при создании экземпляра - через один из этих конструкторов, которыйкак layout_width/height
из XML-макетов передается в класс.
Чтобы сохранить стандартность, я хочу использовать один из них в моем собственном конструкторе, а именно:
CustomView extends LinearLayout {
CustomView(Context context, LayoutArgs layoutArgs, Object... otherCustomArgs){
this(context, ...layoutArgs);
// Use otherCustomArgs
}
}
Я полагаю, поскольку этот пользовательский конструктор никогда не будет использоваться в макетах XML, нет необходимости соответствовать стандартной конструкции, но могут быть и другие вещи, которые конструкторы по умолчанию делают с XML layout_width/height
, которых setLayoutParams
не будет.