#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).
Я надеюсь помочь вам, до свидания 😉