Добавление пользовательского представления в XML ... но с типом GENERIC - PullRequest
11 голосов
/ 15 февраля 2011

Я работаю над пользовательским представлением с надеждой на повторное использование. Он должен иметь общий тип, например:

public class CustomViewFlipper<someType> extends ViewFlipper { }

Я знаю, как связать обычное пользовательское представление с файлом XML. Но я не смог найти никакого примера для этой ситуации. Есть ли способ определить универсальный тип для класса в XML?

Ответы [ 3 ]

9 голосов
/ 03 июля 2012

Поскольку параметры типа на самом деле очищаются в байт-коде, вы можете использовать в XML имя класса, как если бы оно не было параметризовано, а затем привести его к соответствующему параметризованному типу в коде Java.

подумайте о том, чтобы иметь класс:

public class CustomViewFlipper<T extends View> extends ViewFlipper { 

    //...

и в макете вашей деятельности xml:

<view 
    class="com.some.package.CustomViewFlipper"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/customFlipper"/>

тогда в вашей деятельности:

@Override
protected void onCreate(Bundle savedInstanceState) {

    //...
    @SuppressWarnings("unchecked")
    CustomViewFlipper<TextView> customFlipper = 
            (CustomViewFlipper<TextView>) findViewById(R.id.customFlipper);
6 голосов
/ 15 февраля 2011

Я так не думаю, но вы можете создать свой собственный подкласс:

public class TheClassYouPutInTheLayoutFile extends CustomViewFlipper<someType>

и использовать этот класс в своем XML-макете.

0 голосов
/ 10 декабря 2015

Я использую этот подход, и он работает для меня.

    <com.some.package.CustomViewFlipper
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/customFlipper"/>

А затем в упражнении создать экземпляр, как показано ниже

    CustomViewFlipper<someType> customFlipper = 
        (CustomViewFlipper<someType>) findViewById(R.id.customFlipper)
...