чтение содержимого данных в TableRow

#android #tablerow

#Android #tablerow

Вопрос:

У меня есть TableRow, который загружается динамически. Он содержит несколько редактируемых текстов и флажков. Как мне получить пользовательский ввод из этих EditTexts и флажков?

Это мой код

общедоступный пустой cargarProductos (база данных SQLiteDatabase db) { TableLayout tabla = (TableLayout) findViewById(R.id.Detalle);

         Cursor cProd = db.rawQuery("SELECT * FROM vstEncProductos WHERE IdCliente=" idCliente " AND Idcategoria=" IdCategoria, null);
        int ValorChk = 0;


        if (cProd.moveToFirst()) {
            do {
                 TableRow row = new TableRow(this);

                 row.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
                 row.setId(cProd.getInt(0));

                 ImageButton btnBarCode = new ImageButton(this);
                 btnBarCode.setBackgroundResource(R.drawable.barcodereader48);
                 btnBarCode.setOnClickListener(new OnClickListener() {
                     public void onClick(View v) {
                            Intent intent = new Intent("com.google.zxing.client.android.SCAN");
                            intent.setPackage("com.google.zxing.client.android");
                            startActivityForResult(intent, 0);

                     };

                    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
                        if (requestCode == 0) {
                            if (resultCode == RESULT_OK) {
                                String contents = intent.getStringExtra("SCAN_RESULT");
                            String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
                            showDialog(R.string.result_succeeded, "Format: "   format   "nContents: "   contents);

                            // Handle successful scan
                            } else if (resultCode == RESULT_CANCELED) {
                                // Handle cancel
                            }
                        }
                        }

                 }); 

                 row.addView(btnBarCode, new TableRow.LayoutParams(0));

                 TextView txtProducto = new TextView(this);
                 txtProducto.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
                 txtProducto.setText(cProd.getString(1));
                 txtProducto.setWidth(230);
                 row.addView(txtProducto, new TableRow.LayoutParams(1));

                 EditText txtPrecio = new EditText(this);
                 txtPrecio.setWidth(130);
                 txtPrecio.setInputType(InputType.TYPE_CLASS_NUMBER);
                 row.addView(txtPrecio, new TableRow.LayoutParams(2));





                 TextView txtPrecioAnt = new TextView(this);
                 txtPrecioAnt.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
                 txtPrecioAnt.setText(cProd.getString(7));
                 txtPrecioAnt.setWidth(115);
                 txtPrecioAnt.setGravity(Gravity.RIGHT);
                 row.addView(txtPrecioAnt, new TableRow.LayoutParams(3));

                 CheckBox chkPresencia = new CheckBox(this);
                 ValorChk=cProd.getInt(4);
                 chkPresencia.setChecked(ValorChk==-1);
                 chkPresencia.setWidth(50);
                 row.addView(chkPresencia, new TableRow.LayoutParams(4));

                 CheckBox chkPrecioPromo = new CheckBox(this);
                 ValorChk=cProd.getInt(4);
                 chkPrecioPromo.setChecked(ValorChk==-1);
                 chkPrecioPromo.setWidth(50);
                 row.addView(chkPrecioPromo, new TableRow.LayoutParams(4));

                 CheckBox chkAlerta = new CheckBox(this);
                 ValorChk=cProd.getInt(4);
                 chkAlerta.setChecked(ValorChk==-1);
                 chkAlerta.setWidth(50);
                 row.addView(chkAlerta, new TableRow.LayoutParams(4));                 

                 tabla.addView(row, new TableLayout.LayoutParams());



            } while (cProd.moveToNext());  
        }

        cProd.close();
  

Комментарии:

1. Добро пожаловать в Stackoverflow! Если вам полезен конкретный ответ, пожалуйста, проголосуйте за него. Если конкретный ответ правильный, пожалуйста, примите его.

Ответ №1:

Я предполагаю, что вы используете какой-то класс адаптера для загрузки данных в вашу таблицу. Когда вы создаете представление, просто назначьте OnClickListener для флажков и TextWatcher для EditTexts. Используйте обратные вызовы из этих классов, чтобы делать то, что вы хотите, с вводом пользователей. Я правильно понимаю ваш вопрос?

Комментарии:

1. Большое вам спасибо, с помощью TableRow через курсор, поэтому я не понимаю, что мне нужно делать, чтобы читать данные, которые вводят пользователи, чтобы обновить мою таблицу в базе данных. Не нравится ходить по TableRow и удалить EditText control data и флажок

2. В обратных вызовах для OnClickListener и TextWatcher вы должны совершать вызовы в свою базу данных с обновленной информацией о пользователе.

3. Но вот опрос, в котором должно быть много информации, и в конце я сохраняю все данные. чтобы быть более понятным, у меня есть 3 ВКЛАДКИ TABHOST, и в каждой из них есть TableLayout с типом «N» TableRow EditText, содержащий элементы управления и флажки. Мне нужно прочитать все строки и столбцы и получить данные из элементов управления

4. Извините, я, кажется, не понимаю, о чем вы спрашиваете.

5. Мой вопрос! Как мне получить данные, введенные пользователем в элементах управления (EditText), которые содержатся внутри TableRow, который имеет «N» строк.

Ответ №2:

когда вы создаете новые tablerows, вы можете сохранять каждый файл в виде нескольких векторов, например, строк. Тогда вам нужно только получить размер каждого вектора внутри родительского вектора. Мой пример с вашим измененным cody:

              Vector<Vector<String>> result = new Vector<Vector<String>>();
              Vector<String> vecAux = new Vector<String>();

             TextView txtProducto = new TextView(this);
             txtProducto.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
             txtProducto.setText(cProd.getString(1));
             txtProducto.setWidth(230);
             row.addView(txtProducto, new TableRow.LayoutParams(1));
             vecAux.add(cProd.getString(1));

             EditText txtPrecio = new EditText(this);
             txtPrecio.setWidth(130);
             txtPrecio.setInputType(InputType.TYPE_CLASS_NUMBER);
             row.addView(txtPrecio, new TableRow.LayoutParams(2));


             TextView txtPrecioAnt = new TextView(this);
             txtPrecioAnt.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
             txtPrecioAnt.setText(cProd.getString(7));
             txtPrecioAnt.setWidth(115);
             txtPrecioAnt.setGravity(Gravity.RIGHT);
             row.addView(txtPrecioAnt, new TableRow.LayoutParams(3));
             vecAux.add(cProd.getString(7));

             CheckBox chkPresencia = new CheckBox(this);
             ValorChk=cProd.getInt(4);
             chkPresencia.setChecked(ValorChk==-1);
             chkPresencia.setWidth(50);
             row.addView(chkPresencia, new TableRow.LayoutParams(4));


             CheckBox chkPrecioPromo = new CheckBox(this);
             ValorChk=cProd.getInt(4);
             chkPrecioPromo.setChecked(ValorChk==-1);
             chkPrecioPromo.setWidth(50);
             row.addView(chkPrecioPromo, new TableRow.LayoutParams(4));

             CheckBox chkAlerta = new CheckBox(this);
             ValorChk=cProd.getInt(4);
             chkAlerta.setChecked(ValorChk==-1);
             chkAlerta.setWidth(50);
             row.addView(chkAlerta, new TableRow.LayoutParams(4));                 

             tabla.addView(row, new TableLayout.LayoutParams());
  

результат.добавить (vecAux);

И получение результатов поиска по всей позиции вектора:


       String texto = "";

      for (int i = 0; i < result.size(); i  ) {
        for (int j = 0; j < result.elementAt(i).size(); j  ) {
       texto  = result.elementAt(i).elementAt(j)   "t";
        }
      }
  

Для получения, если флажок установлен или нет, вы можете получить его по идентификатору (findViewById).
Я надеюсь помочь вам, до свидания 😉