空视图添加到线性布局

时间:2016-10-20 06:50:47

标签: android view android-linearlayout layout-inflater

我想要为给定的layout充气,向其中的textviews添加文字,然后动态地将此视图添加到LinearLayout,并添加此view多次linearLayout。 要膨胀的观点是: -

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dp">

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:gravity="center"
        android:padding="5dp"
        android:layout_weight="1">
       <TextView
           android:textSize="13sp"
           android:id="@+id/tv1"

           android:layout_width="wrap_content"
           android:layout_height="wrap_content" />
    </LinearLayout>
    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:gravity="center"
        android:padding="5dp"
        android:layout_weight="3">
        <TextView

            android:id="@+id/tv2"
            android:textSize="13sp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

    </LinearLayout>
    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center"
        android:padding="5dp"
        android:layout_weight="3">
        <TextView
            android:textSize="13sp"
            android:id="@+id/tv3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:textSize="13sp"
            android:id="@+id/tv4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

    </LinearLayout>

必须添加的LinearLayout是: -

    <LinearLayout
    android:id="@+id/pass_info"
    android:layout_below="@+id/booking_title"
    android:layout_marginTop="10dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">


</LinearLayout>

最终视图应如下所示: -

1 mark 50%
2 sam  30%
3 ava  45%

view动态添加一个在另一个之下。我使用的代码是: -

 for(int i = 0; i <  getStudentCount(); i++){
        LayoutInflater vi=(LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        LinearLayout insertPoint=(LinearLayout)findViewById(R.id.pass_info);
        View v=vi.inflate(R.layout.pass_item,insertPoint,false);

        TextView textView1=(TextView)v.findViewById(R.id.tv1);
        TextView textView2=(TextView)v.findViewById(R.id.tv2);
        TextView textView3=(TextView)v.findViewById(R.id.tv3);
        TextView textView4=(TextView)v.findViewById(R.id.tv4);

        textView1.setText(getRollNum(i));
        // likewise for other textviews
        insertPoint.addView(v);
        }

添加了views但未显示任何内容,textviews为空。可能的原因是什么?

2 个答案:

答案 0 :(得分:1)

代码中的问题

您的代码有关于布局膨胀和视图绑定的几个问题。您想要实现的与您的代码实现的不同。

实现您的愿望的步骤

您想要做的是:

  • 创建一个用tv1,tv2来扩展布局的类......让我们说这个类叫做TextsClass。您可以了解有关它的更多信息here。这是您使用textviws扩充布局的地方。
  • 然后,在这个类中,你会发现viewById到tv1,tv2等等(tv1 = (TextView) findViewById(R.id.tv1);将它们绑定到父布局)
  • 创建在这些TextView中设置文本的方法,例如 public TextView setTv1Text(String text) tv1.setText(text);
  • 然后,在for循环中,您必须实例化新的TextClass对象。实例化后,您将获得每个TextView并设置其文本,例如:

    TextsClass textsClass = new TextsClass(getContext());
    textsClass.setTv1Text(getRollNum(i));
    //Do it with the other textviews
    insertPoint.add(textsClass);
    

关于您的代码的摘要

  • 你在for循环中多次膨胀linearLayouts(insertPoint one),你只需要做一次(在for循环之前)
  • 您正在给一个布局(insertPoint)充气并尝试将视图从另一个布局绑定到它(tv1,tv2 ......)
  • 您在循环内多次绑定视图,这是不必要的(如果没有问题)
  • 您正尝试使用相同的文本视图放入insertPoint布局,但您无法执行此操作。你不能将layout.add(child)与重复的孩子一起使用,它们必须是不同的(这就是为什么你必须总是在for循环中实例化新孩子,在我们的例子中,TextsClass)。

尝试按照谷歌的链接创建自定义视图,这是最佳选择,然后按照我在此处指定的步骤实现您的目标。

如果我的回答对你有帮助,请告诉我,欢呼。

答案 1 :(得分:0)

    Linearlayout  frameLayout = (LinearLayout ) view.findViewById(R.id.frm);
    LayoutInflater inflatr = (LayoutInflater) Context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View  menuLayout = inflatr.inflate(R.layout.n_demoview, frameLayout, true);    

这对我有用 我希望这对你有用!!