изворотливая (возможно глупая) попытка раздувать представление до экземпляра расширенного объекта View - PullRequest
0 голосов
/ 12 октября 2011

Я создал модель макета TableRow, которую я использую в качестве шаблона для настраиваемого представления, расширяющего TableRow.

Мое желание состоит в том, чтобы накачать строку внутри расширенного класса и иметь этот раздутый экземпляр BEрасширенный ряд.

В псевдокоде:

public class MyTableRow extends TableRow{
    if(conditionA)
       this = (TableRow)inflate(R.layout.myModelRowA);
    if(conditionB)
       this = (TableRow)inflate(R.layout.myModelRowB);
    etc...
}

А потом, когда я добавляю эти строки в таблицу, я продолжаю как обычно ...

myTable.addView(new MyTableRow(this));

Такпроблема в том, что, очевидно, я не могу присвоить вещи этому , даже если логически это имеет смысл, поскольку в приведенном выше примере это является TableRow.

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

Я что-то упускаю из виду?Или я должен просто согласиться на то, что у меня есть?

Ответы [ 2 ]

1 голос
/ 12 октября 2011

Определите макеты строк A и B с помощью тега (см. здесь ) вместо :

<merge xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Other component declarations here  -->
</merge>

затем накачайте одну из этих компоновок в расширенном конструкторе строк:

public MyTableRow(Context context, AttributeSet attrs) {
    super(context, attrs);
    if (condA) {
        inflate(context, R.layout.RowA, this);
    } else {
        inflate(context, R.layout.RowB, this);
    } 
}

Затем в макете таблицы используйте расширенную строку вместо TableRow:

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:stretchColumns="1">

    <your.package.name.MyTableRow>

    </your.package.name.MyTableRow>

</TableLayout>
0 голосов
/ 12 октября 2011

Не уверен, что именно вы ищете, но вы можете получить представление и получить контекст.Что-то вроде View view = (TableRow) inflate (R.layout.myModelRowA);Context ctx = view.getContext ();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...