开发者

Using LayoutInflater to create dynamic view

I have created a xml file I wish to repeat a number of times and populate within the main view. I have read that LayoutInflater is the way to go but I am having issues getting it to work

first question. the xml item I created has a number of textview within it. Can this be done or can the xml only contain one 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, nu开发者_C百科ll);
            EditText editview2= (EditText) inflater.inflate(R.id.editview2, null);

I am then running round a for loop on an array and setting the text for each the values above and then adding the view to the mainlayout view

Currently it is erroring on the inflated view. am I doing this correctly?

Thanks


There is some problem in your code. To get the element of any view use findViewById method

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);


I don't think you are doing this the right way. First thing to know is that a Scrollview can contain only one element. Do you have a unique LinearLayout or TableLayout within your Scrollview, to encapsulate the textViews after ?

If I were you :

In your XML layout file (i named it "yourfile" here), use a hierarchy such as :

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

Then in your Activity, inflate the scrollview :

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

Then to get the TextViews, go through your ScrollView using getChild(). For example to assign "my text" to the first textview, this should work :

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

To understand : if you want to reach the single LinearLayout you do

mScroll.getChildAt(0)

So to get to the first text view (first child of LinearLayout), you do

mScroll.getChildAt(0).getChildAt(0)
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜