Greets. Я работаю над проектом и думал, что сверну составной компонент. Я выложил их в xml и написал новый класс, расширяющий LinearLayout. В основном мне понадобится пять или шесть из них в Деятельности. Я хочу создать их внутри Activity, программно, потому что я не знаю, сколько мне понадобится до выполнения. Кроме того, я создал XML-файл для их настройки, который я не включил ниже. У меня проблема с каждым из методов, которые я нашел для этого.
Вот сегменты метода внутри класса, который я создал, который расширяет LinearLayout:
public ExtendedLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
...
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
((Activity)getContext()).getLayoutInflater().inflate(R.layout.extended_linear_layout, this);
...
}
А внутри Задания эти два решения кажутся наиболее близкими к тому, что я ищу.
Не знаю, где можно получить атрибуты с помощью этого метода:
ExtendedLinearLayout customViewClass = new ExtendedLinearLayout(this, attrs);
layout.addView(customViewClass)
Не знаю, как указать, что инфлятор должен использовать ExtendedLinearLayout с этим методом:
LayoutInflater inflater = LayoutInflater.from(this);
inflater.inflate(R.layout.extended_linear_layout, parent_layout);
Я, вероятно, соглашусь на использование ListView - но это кажется немного излишним для пяти-шести пунктов. Кроме того, если раньше вы работали с Flex, то по крайней мере кажется разумным решением проблемы.
Спасибо,
Randall
---------------- UPDATE -------------------
Я попробовал метод, как описано ниже. После того, как я все настроил, я получаю исключение InflationException: бинарный XML-файл # 8: Ошибка надувания класса. Я чувствую , как XML выглядит просто отлично. Одна вещь, в которой я могу быть смущена, - это где вызвать инфлятор. Прямо сейчас я вызываю inflater в onFinishInflate () пользовательского класса, а также в Activity следующим образом:
public class ExtendedLinearLayout extends LinearLayout {
...
public ExtendedLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.extended_linear_layout, null);
...
}
}
А в деятельности:
public class TestActivity extends Activity {
LinearLayout list;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
list = (LinearLayout) findViewById(R.id.simple_list);
runTestCode();
}
private void runTestCode() {
LayoutInflater inflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ExtendedLinearLayout layoutOne =
(ExtendedLinearLayout) inflater.inflate(R.layout.extended_linear_layout, list);
}
}
Спасибо и надеюсь, у вас есть время взглянуть. Мне нравится разбираться во всем, копаясь в Интернете, но со вчерашнего утра я готовил это несколько часов. Я в двух дюймах от простого рефакторинга в ListAdapter.
---------------- UPDATE -------------------
Вот XML-файл
<?xml version="1.0" encoding="utf-8"?>
<com.anotherandroidblog.ExtendedLinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
>
<TextView
android:id="@+id/text_one"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text=""
></TextView>
<TextView
android:id="@+id/text_two"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text=""
></TextView>
<TextView
android:id="@+id/text_three"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="2"
></TextView>
</com.anotherandroidblog.ExtendedLinearLayout>