Android пользовательский конструктор представления

Я узнаю об использовании Пользовательских Представлений от следующего:

http://developer.android.com/guide/topics/ui/custom-components.html#modifying

В описании говорится:

Инициализация класса Как всегда, супер называют первым. Кроме того, это не конструктор по умолчанию, а параметризованный. EditText создается с этими параметрами, когда он расширяется из файла расположения XML, таким образом, наш конструктор должен и взять их и передать их конструктору суперкласса также.

Существует ли лучшее описание? Я пытался выяснить то, на что должен быть похожим конструктор (конструкторы), и я придумал 4 возможных варианта (см. пример в конце сообщения). Я не уверен, что эти 4 варианта делают (или не делайте), почему я должен реализовать их, или что означают параметры. Существует ли описание их?

public MyCustomView()
{
    super();
}

public MyCustomView(Context context)
{
    super(context);
}

public MyCustomView(Context context, AttributeSet attrs)
{
    super(context, attrs);
} 

public MyCustomView(Context context, AttributeSet attrs, Map params)
{
    super(context, attrs, params);
} 

34
задан dandan78 7 January 2013 в 22:18
поделиться

1 ответ

Первый вам не нужен, он просто не сработает.

Третье будет означать, что ваше пользовательское представление можно будет использовать из файлов макета XML. Если вас это не волнует, вам это не нужно.

Четвертый просто неправильный, AFAIK. Не существует конструктора View , который принимает карту Map в качестве третьего параметра. Один из них принимает int в качестве третьего параметра, который используется для переопределения стиля по умолчанию для виджета.

Я предпочитаю использовать синтаксис this () , чтобы объединить их:

public ColorMixer(Context context) {
    this(context, null);
}

public ColorMixer(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
}

public ColorMixer(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    // real work here
}

Вы можете увидеть остальную часть этого кода в примере этой книги .

66
ответ дан 27 November 2019 в 16:20
поделиться
Другие вопросы по тегам:

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