在onCreateView方法中的视图中添加视图

时间:2016-02-27 08:19:39

标签: android

我有以下通知片段。该文件的名称为notification_fragment.xml

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

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/notification_desc"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="20dp"
            android:gravity="left"
            android:text="Lorem Epsum" />
    </LinearLayout>

</LinearLayout>

我还有另一个xml文件,它是notification.xml。

我使用以下代码来扩充notification_fragment.xml文件。

public View onCreateView(final LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        rootView = inflater.inflate(R.layout.notification_fragment, container, false);
        initView();

        return rootView;
      }

      public void initView(){
        notification_desc = (TextView) rootView.findViewById(R.id.notification_desc);
    }

}

我需要做的是notfication_desc的值将是动态的,因此应该显示的文本字段的数量将动态增加。所以我想在notification_fragment.xml中设置textviews的值。最后,我想在每次设置notification_desc的值时动态地使用notification.xml来扩充这个xml。我怎样才能做到这一点?或者我只能在onCreateView方法中创建子视图?

更新

我从sqlite db中检索值并尝试动态显示值。

这是我检索值的方法,

List<PendingOrdersDao> contacts = db.getAllPendingOrders();

for (PendingOrdersDao cn : contacts) {
        initView(cn.getProformoInvoiceNumber(), cn.getProformoInvoiceDate());
}

当我调用initView方法时,它应该根据db中存在的条目数动态地向布局添加视图。以下是我的initView方法。

private void initView(String proformaInvoice, String invoiceDate){

        LinearLayout mLinearLayoutContainer = (LinearLayout) mRootView.findViewById(R.id.dashboard_container);
        LayoutInflater inflater = getActivity().getLayoutInflater();
        View v = inflater.inflate(R.layout.dashboard_fragment, mLinearLayoutContainer, false);

        mProformaInvoice = (TextView) v.findViewById(R.id.dashProformaInvoiceNo);
        mInvoiceNumber = (TextView) v.findViewById(R.id.dashInvoiceNo);

        mProformaInvoice.setText(proformaInvoice);
        mInvoiceNumber.setText(invoiceNumber);

        mLinearLayoutContainer.addView(v);
    }

问题是,数据库中有三个条目因此应显示3个视图,但它只显示一个视图

3 个答案:

答案 0 :(得分:1)

我可以看到您想要将子视图动态添加到LinearLayout。您只需要ViewGroup,任何ViewGroup,(LinearLayout,RelativeLayout,FrameLayout,...)并使用addView方法向其中添加子项。

public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    rootView = inflater.inflate(R.layout.notification_fragment, container, false);
    initView();
    return rootView;
}

public void initView(){
    mLinearLayoutContainer = (LinearLayout) rootView.findViewById(R.id.linearlayout_id);
    LayoutInflater inflater = getActivity().getLayoutInflater();
    // The below code can be inside a loop or whatever you want
    View v = inflater.inflate(R.layout.notification, mLinearLayoutContainer, false);
    mLinearLayoutContainer.addView(v);
}

答案 1 :(得分:0)

我对Android开发很新,所以这可能或者可能都不正确。

你不能在你的Activity的OnVisible()调用期间在TextView上调用.setText(“你想要的任何东西”)或者那些东西吗?

TextView notificationDescription = (TextView) findViewById(R.id.notification_desc);

notificationDescription.setText("Put yo text here!");

答案 2 :(得分:0)

据我所知,您希望动态地将textview添加到您的布局中。为此,请将xml文件的Linearlayout视为父布局,您必须在其中动态添加textView。并使用以下代码。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF"
android:id="@+id/root_ll"
android:orientation="vertical" >
</LinearLayout>

LinearLayout rootLayout = (LinearLayout) findViewById(R.id.root_ll);


 private void createDynamicLayout() {
      LinearLayout.LayoutParams params1 = new LinearLayout.LayoutParams(
            0, LinearLayout.LayoutParams.WRAP_CONTENT, 1.0f);

        TextView fieldLabel = new TextView(mContext);
                    fieldLabel.setTextSize(TypedValue.COMPLEX_UNIT_SP, textViewSize);
                    fieldLabel.setTextColor(getResources().getColor(R.color.activity_tv_text_color));
                    fieldLabel.setText("your text");
                    fieldLabel.setLayoutParams(params1);
                    rootLayout.addView(fieldLabel);
 }