电贺。我正在研究一个项目,并认为我会卷起一个复合组件。我将它们放在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)
不知道如何指定inflater应该使用此方法使用ExtendedLinearLayout:
LayoutInflater inflater = LayoutInflater.from(this);
inflater.inflate(R.layout.extended_linear_layout, parent_layout);
我可能会选择使用ListView - 但对于五到六个项目来说似乎有些过分。此外,之前曾与Flex合作过,至少似乎似乎是解决问题的合理方法。
谢谢, 兰德尔
---------------- UPDATE -------------------
我尝试过如下所述的方法。一旦我设置了所有内容,我就会得到一个InflationException:二进制XML文件行#8:错误的类膨胀。我感觉就像xml看起来很好。我可能会感到困惑的一件事是在哪里打电话给inflater。现在,我在自定义类的onFinishInflate()以及Activity中调用inflater,如下所示:
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约2英寸。
---------------- 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>
答案 0 :(得分:0)
您需要在XML文件中使用完整的类名:而不是使根元素LinearLayout
使其成为ExtendedLinearLayout
的完整类名(包括包名)。然后LayoutInflater
将知道该怎么做。
编辑:此外,attrs
选项实际上并不可行(或者至少我不这么认为)。我还没有找到一种在运行时生成实际attrs
对象实例的方法:没有公共构造函数,我希望这是框架在引擎盖下无法访问的另一个东西。