addView()到inflateLayout

时间:2012-03-03 14:43:42

标签: android inflate

这是我的代码:

        LinearLayout ll = (LinearLayout) View.inflate(TabAndPlay.this, R.layout.current_play, null);

        TextView tv = new TextView(TabAndPlay.this);
        tv.setText("hallo");
        tv.setBackgroundColor(Color.GRAY);
        ll.addView(tv);

current_play.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/aktuelle_spiele"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>

</LinearLayout>

R.id.llPlay(有xml显示)

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

    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dip">

        <LinearLayout
            android:id="@+id/llPlay"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical" >

        </LinearLayout>

    </ScrollView>

</LinearLayout>

这是onOptionsItemSelected()

        case R.id.current_play:
            LinearLayout mainLayout = (LinearLayout) findViewById(R.id.llPlay);
            mainLayout.removeAllViews();
            LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            inflater.inflate(R.layout.current_play, mainLayout, true); 
            return true;

如果我点击我的菜单项,我在R.id.llPlays上的所有当前视图都将被删除! 显示来自current_play的按钮。但是来自“Here here”的TextView不显示.. 为什么?我的错误是什么?

2 个答案:

答案 0 :(得分:0)

你的问题含糊不清,所以我猜一个答案:

onOptionsItemSelected()中,您搜索标识为LinearLayout的{​​{1}},并使用R.id.llPlay删除其中的所有子视图,然后对removeAllViews()进行充气并将您的布局设置为R.layout.current_playLinearLayout)与aktuelle_spiele以及Button(您为其设置文本“Hallo”)。问题是,当您为布局充气时,您只会在此时为该布局上的视图充气。如果您希望您的布局也包含您在代码中构建的TextView,那么您有两个选项:

1直接在TextView布局中添加TextView,并为其添加ID,以便稍后检索current_play.xmlTextView}并设置文本“你好”:

findViewById(R.id.the_text)

修改

2然后在您想要的地方动态构建布局,但保留对该膨胀视图的引用。因此,如果您创建这样的视图:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/aktuelle_spiele"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>
    <TextView 
        android:id="@+id/the_text" 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />    
</LinearLayout>

然后保留对该膨胀视图 LinearLayout ll = (LinearLayout) View.inflate(TabAndPlay.this, R.layout.current_play, null); TextView tv = new TextView(TabAndPlay.this); tv.setText("hallo"); tv.setBackgroundColor(Color.GRAY); ll.addView(tv); 的引用,并将其传递给ll回调到主要布局:

onOptionsItemSelected()

答案 1 :(得分:0)

您忘记了该textview的布局参数。

LinearLayout.LayoutParams lp=new LinearLayout.LayoutParams(wrap_content,wrap_content);

然后添加

ll.addView(tv);