使用LayoutInflater创建动态视图

时间:2011-07-01 13:52:27

标签: android xml

我创建了一个xml文件,我希望重复多次并在主视图中填充。 我已经读过LayoutInflater是要走的路,但我遇到了让它工作的问题

第一个问题。我创建的xml项目中有许多textview。可以这样做还是xml只能包含一个textview?

ScrollView mainlayout = (ScrollView) findViewById(R.id.ScrollView1);    
LayoutInflater  inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View view = (View) inflater.inflate(R.layout.sightmarks_item, null);
            TextView textview1 = (TextView) inflater.inflate(R.id.textView1, null);
            EditText editview1 = (EditText) inflater.inflate(R.id.editview1, null);
            EditText editview2= (EditText) inflater.inflate(R.id.editview2, null);

然后我在数组上运行for循环并为上面的每个值设置文本,然后将视图添加到mainlayout视图

目前在膨胀的视图上出错了。 我这样做是否正确?

谢谢

2 个答案:

答案 0 :(得分:5)

您的代码中存在一些问题。要获取任何视图的元素,请使用findViewById方法

ScrollView mainlayout = (ScrollView) findViewById(R.id.ScrollView1);    
LayoutInflater  inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = (View) inflater.inflate(R.layout.main, null);
TextView textview1 = (TextView) view.findViewById(R.id.textview1);
EditText editview1 = (EditText) view.findViewById(R.id.editview1);
EditText editview2= (EditText) view.findViewById(R.id.editview2);

答案 1 :(得分:0)

我不认为你这样做是正确的。首先要知道的是Scrollview只能包含一个元素。 Scrollview中是否有一个独特的LinearLayout或TableLayout,用于封装textViews?

如果我是你:

在XML布局文件中(我将其命名为“yourfile”),使用层次结构,例如:

<ScrollView  xmlns:android="http://schemas.android.com/apk/res/android" ... />
    <LinearLayout ...>
        <TextView .../>
        <TextView .../>
        ...
    </LinearLayout>
</ScrollView> 

然后在你的活动中,给滚动视图充气:

ScrollView mScroll = (ScrollView) getLayoutinflater().inflate(R.layout.yourfile, null)

然后要获取TextViews,请使用getChild()浏览ScrollView。例如,要将“我的文本”分配给第一个文本视图,这应该有效:

( (TextView) ((ViewGroup) mScroll.getChildAt(0)).getChildAt(0)).setText("my text");

要理解:如果您想要达到单个LinearLayout

mScroll.getChildAt(0)

所以要进入第一个文本视图(LinearLayout的第一个孩子),你可以

mScroll.getChildAt(0).getChildAt(0)