如何在DialogBox内部以编程方式创建Edittext取决于数组大小?

时间:2016-07-16 12:35:50

标签: android json dialog android-edittext

我创建了带有4个EditText的Dialog Box。但是现在我需要动态地依赖于API响应JsonObject计数。

以下是我的回复:

{  
   "additional_charges":{  
      "1":"121324324",
      "2":"245657687",
      "3":"379809733",
      "4":"4467797894"
   }
}
  

如果“additional_charges”,则具有“1”,“2”,“3”--->我要表现3   EDITTEXT。

     

如果“additional_charges”,则具有“1”,“2”,“3”,“4”--->我要显示4   对话框中的Edittext。

怎么做? dialog.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fare_id"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@color/white"
    android:orientation="vertical">

    <TextView
        android:id="@+id/currentlocTxt"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0.2"
        android:ellipsize="marquee"
        android:fadingEdge="horizontal"
        android:gravity="center"
        android:lines="1"
        android:marqueeRepeatLimit="marquee_forever"
        android:padding="5dp"
        android:scrollHorizontally="true"
        android:singleLine="true"
        android:text="@string/additionalcharge"
        android:textColor="@color/button_accept"
        android:textSize="15sp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_margin="5dp"
        android:id="@+id/chargeType"
        android:orientation="vertical"
        android:padding="3dp"
        android:weightSum="1">


    </LinearLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_marginTop="@dimen/com_facebook_share_button_compound_drawable_padding"
        android:background="@color/hintcolor" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:weightSum="1">

        <Button
            android:id="@+id/cancelBut"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:layout_weight="0.5"
            android:background="@color/white"
            android:text="Cancel"
            android:textColor="@color/button_accept" />

        <View
            android:layout_width="1dp"
            android:layout_height="match_parent"
            android:layout_marginTop="@dimen/com_facebook_share_button_compound_drawable_padding"
            android:background="@color/hintcolor" />

        <Button
            android:id="@+id/submitBut"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="0.5"
            android:background="@color/white"
            android:text="Submit"
            android:textColor="@color/button_accept" />
    </LinearLayout>
</LinearLayout>

Dialog.class:

private void ShowDialog(final String completeUrl, Context context) {
            if (NotificationAct.passenger_mobile != null) {

                final View view = View.inflate(OngoingAct.this, R.layout.additional_charges, null);
                cDialog = new Dialog(OngoingAct.this, R.style.dialogwinddow);
                cDialog.setContentView(view);
                cDialog.setCancelable(false);
                cDialog.show();
                FontHelper.applyFont(OngoingAct.this, cDialog.findViewById(R.id.alert_id));

                LinearLayout linlay_container = (LinearLayout) findViewById(R.id.chargeType);

                //length from json response
                int arrayLength = 4;
                EditText editText[] = new EditText[0];
                for (int i = 0; i < arrayLength; i++) {
                    editText[i] = new EditText(this);
                    editText[i].setBackgroundResource(R.color.white);
                    editText[i].setId(i);
                    linlay_container.addView(editText[i]);
                }

                final Button button_success = (Button) cDialog.findViewById(R.id.submitBut);
                final Button button_failure = (Button) cDialog.findViewById(R.id.cancelBut);
                button_failure.setVisibility(View.VISIBLE);

              }
}

1 个答案:

答案 0 :(得分:1)

首先,解析Json响应并获取数组的长度。

然后,在对话框中创建一个布局容器,在其中添加EditText。

然后,您可以通过创建新的EditText对象并根据数组列表将其添加到容器来迭代for循环。

查看代码段,

 LinearLayout linlay_container=(LinearLayout)findViewById(R.id.linlay_container);
    //length from json response
    int arrayLength=?;
    for (int i = 0; i <arrayLength ; i++) {
        EditText editText=new EditText(this);
        linlay_container.addView(editText);
    }

这里,linlay_container是对话框的容器布局,你想在其中添加EditText,arraylength是json响应中的数组大小。