获取LinearLayout中的信息复选框和EditText

时间:2015-04-28 20:27:15

标签: android android-layout checkbox

我有一个复选框和EditText,它由查询动态生成

这是生成复选框和EditText并将其添加到LinearLayout

的方法
private void create_form() {
    JSONObject json = null;
    int count = 0;
    lm = (LinearLayout) findViewById(R.id.linearMain);
    int seccion = Integer.parseInt(conf.get_id_seccion());
    int tipo_solicitud = Integer.parseInt(conf.get_tipo_solicitud());
    JSONObject jobj = obj_sqlite.get_form(seccion, tipo_solicitud);


    try {
        count = Integer.parseInt(jobj.getString("cont"));
        json = new JSONObject(jobj.getString("json"));
    } catch (Exception e) {
        Log.e("getParams", e.getMessage());
    }

    for (int x = 1; x <= count; x++) {

        try {
            JSONObject json_row = new JSONObject(json.getString("row" + x));

            CheckBox chb = new CheckBox(this);
            chb.setText(json_row.getString("pregunta"));
            chb.setId(json_row.getInt("pregunta_verificacion_supervision"));
            chb.setTextSize(10);
            chb.setPadding(8, 3, 8, 3);
            chb.setTypeface(Typeface.SERIF, Typeface.BOLD_ITALIC);
            chb.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                    LayoutParams.WRAP_CONTENT));

            lm.addView(chb);

            EditText et = new EditText(this);
            et.setHint("observaciones");
            et.setId(json_row.getInt("pregunta_verificacion_supervision"));
            et.setTextSize(10);
            et.setPadding(8, 3, 8, 3);
            et.setTypeface(Typeface.SERIF, Typeface.BOLD_ITALIC);
            et.setInputType(android.text.InputType.TYPE_TEXT_FLAG_IME_MULTI_LINE);
            et.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                    LayoutParams.WRAP_CONTENT));

            lm.addView(et);


        } catch (Exception e) {
            Log.e("getParams", e.getMessage());
        }
    }
}

现在我需要将所有这个复选框与EditText一起选中,以便将它们保存在表格中

这是我的xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.php_mysql_sqlite.Formulario_verificacion_supervision" >

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/title_activity_preguntas_revision" android:id="@+id/textView1"/>

<ScrollView
    android:id="@+id/scrollView1"
    android:layout_width="285dp"
    android:layout_height="330dp"
    android:layout_marginTop="30dp" >

    <LinearLayout
        android:id="@+id/linearMain"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentTop="true"
        android:background="@color/White"
        android:orientation="vertical" >
    </LinearLayout>
</ScrollView>

<Button
    android:id="@+id/bt_regresar"
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignRight="@+id/scrollView1"
    android:onClick="regresar"
    android:text="@string/bt_regresar" />

<Button
    android:id="@+id/bt_guardar"
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/bt_finalizar"
    android:layout_alignBottom="@+id/bt_finalizar"
    android:layout_alignLeft="@+id/scrollView1"
    android:text="@string/bt_guardar"
    android:onClick="guardar" />

<Button
    android:id="@+id/bt_finalizar"
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/bt_regresar"
    android:layout_alignBottom="@+id/bt_regresar"
    android:layout_marginLeft="31dp"
    android:layout_toRightOf="@+id/bt_guardar"
    android:text="@string/bt_finalizar"
    android:onClick="finalizar" />

这是目前的一张图片 http://i61.tinypic.com/2uo2hi8.jpg

通过按钮单击调用的方法,使操作获取数据

感谢所有

PS:如果你给我负面评价,请留言,因为它过去曾发生在我身上而且不能做错

2 个答案:

答案 0 :(得分:2)

您有两种选择。

  • 为每个复选框和EditText设置唯一ID,并将其ID保存在ArrayList中。如果要进行检查

    for(int i = 0 ; i < listOfCboxIds.size() ; ++i) {
        CheckBox cbox = (CheckBox) findViewById(listOfCboxIds.get(i));
        if(cbox.isChecked()) {
            // Do something
        }
    }
    
  • 在ArrayList中保留对CheckBoxes和EditTexts的引用,然后迭代它。这对CPU密集度较低。

    List<CheckBox> yourCheckBoxes = new ArrayList<CheckBox>();
    List<EditText> yourEditTexts  = new ArrayList<EditText>();
    
    
      try {
                JSONObject json_row = new JSONObject(json.getString("row" + x));
    
                CheckBox chb = new CheckBox(this);
                chb.setText(json_row.getString("pregunta"));
                chb.setId(json_row.getInt("pregunta_verificacion_supervision"));
                chb.setTextSize(10);
                chb.setPadding(8, 3, 8, 3);
                chb.setTypeface(Typeface.SERIF, Typeface.BOLD_ITALIC);
                chb.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                        LayoutParams.WRAP_CONTENT));
    
                lm.addView(chb);
    
                EditText et = new EditText(this);
                et.setHint("observaciones");
                et.setId(json_row.getInt("pregunta_verificacion_supervision"));
                et.setTextSize(10);
                et.setPadding(8, 3, 8, 3);
                et.setTypeface(Typeface.SERIF, Typeface.BOLD_ITALIC);
                et.setInputTyp
    

    E(android.text.InputType.TYPE_TEXT_FLAG_IME_MULTI_LINE);             et.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,                     LayoutParams.WRAP_CONTENT));

            lm.addView(et);
            yourCheckBoxes.add(chb);
            yourEditTexts.add(et);
    
    
        } catch (Exception e) {
            Log.e("getParams", e.getMessage());
        }
    

一旦你需要它们

for(int i = 0 ; i < yourCheckBoxes.size() ; ++i) {
    CheckBox cbox = (CheckBox) yourCheckBoxes.get(i);
    EditText et = (EditText) yourEditTexts.get(i);
    if(cbox.isChecked()) {
        // Do something
    }
}

答案 1 :(得分:0)

与Bojan Kseneman一样,最佳选择是将您的视图存储在数据结构中。这可能如下所示:

List<CheckBox> checkBoxes = new ArrayList<>();
List<EditText> editTexts = new ArrayList<>();

然后你将每个框和editText添加到这些列表中,稍后你会像这样迭代它们:

for(int i = 0; i < checkBoxes.size(); i++){
    CheckBox box = checkBoxes.get(i);
    EditText editText = editTexts.get(i);

    doSomeThingWithThem();
}

希望这有帮助。