Je crée par programme un TableLayout dynamique avec un mélange de TextView et EditText. Ces TextViews sont extraits de la base de données sqlite de l'application. La dernière colonne de TableLayout est constituée du champ EditText dont l'état est Invisible. Je veux définir l'état de l'EditText de la ligne particulière de TableLayout à Visible basé sur onClick sur une ligne de TableLayout. Après onClick, EditText devrait être visible et je veux stocker l'entrée faite dans cet editText dans la base de données.Comment définir Id pour la liste de EditText dans le TableLayout créé dynamiquement dans android
Mon code de tentative pour c'est ci-dessous:
List<Details> customerDetailList = db.getAllCustomers(routeId);
Details customerDetails;
TableLayout stk = (TableLayout) findViewById(R.id.tableLayout1);
stk.removeAllViews();
TableRow tbrow0 = new TableRow(this);
TextView tv0 = new TextView(this);
tv0.setText("Sl.No.");
tv0.setTextColor(Color.BLACK);
tv0.setTypeface(null, Typeface.BOLD);
//tv0.setTextSize(20);
tv0.setPadding(5, 5, 5, 5);
tbrow0.addView(tv0);
TextView tv1 = new TextView(this);
tv1.setText(" Patron ID ");
tv1.setTextColor(Color.BLACK);
tv1.setTypeface(null, Typeface.BOLD);
//tv1.setTextSize(20);
tv1.setPadding(5, 5, 5, 5);
tbrow0.addView(tv1);
TextView tv2 = new TextView(this);
tv2.setText(" Name ");
tv2.setTypeface(null, Typeface.BOLD);
//tv2.setTextSize(20);
tv2.setTextColor(Color.BLACK);
tv2.setPadding(5, 5, 5, 5);
tv2.setGravity(Gravity.CENTER);
tbrow0.addView(tv2);
TextView tv3 = new TextView(this);
tv3.setText(" Requested ");
tv3.setTextColor(Color.BLACK);
tv3.setTypeface(null, Typeface.BOLD);
//tv3.setTextSize(20);
tv3.setPadding(5, 5, 5, 5);
tv3.setGravity(Gravity.CENTER);
tbrow0.addView(tv3);
TextView tv4 = new TextView(this);
tv4.setText(" Supplied ");
tv4.setTypeface(null, Typeface.BOLD);
//tv4.setTextSize(20);
tv4.setTextColor(Color.BLACK);
tv4.setPadding(5, 5, 5, 5);
tbrow0.addView(tv4);
tbrow0.setBackgroundResource(R.color.colorLightGray);
stk.addView(tbrow0);
for (int row = 0, j = 1; row < customerDetailList.size(); row++, j++) {
customerDetails = customerDetailList.get(row);
TableRow tbrow = new TableRow(this);
tbrow.setClickable(true);
final TextView t1v = new TextView(this);
t1v.setText("" + j);
t1v.setTextColor(Color.BLACK);
t1v.setGravity(Gravity.CENTER);
t1v.setPadding(5, 5, 5, 5);
tbrow.addView(t1v);
TextView t2v = new TextView(this);
t2v.setText("" + customerDetails.getcId());
t2v.setTextColor(Color.BLACK);
t2v.setGravity(Gravity.CENTER);
t2v.setPadding(5, 5, 5, 5);
tbrow.addView(t2v);
TextView t3v = new TextView(this);
t3v.setText("" + customerDetails.getName());
t3v.setTextColor(Color.BLACK);
t3v.setGravity(Gravity.CENTER);
t3v.setPadding(5, 5, 5, 5);
tbrow.addView(t3v);
TextView t4v = new TextView(this);
t4v.setText("" + customerDetails.getRequested());
t4v.setTextColor(Color.BLACK);
t4v.setGravity(Gravity.CENTER);
t4v.setPadding(5, 5, 5, 5);
tbrow.addView(t4v);
final EditText t5v = new EditText(this);
// t5v.setHint(0);
t5v.setId(j);
t5v.setVisibility(View.INVISIBLE);
t5v.setTextColor(Color.BLACK);
t5v.setGravity(Gravity.CENTER);
t5v.setPadding(5, 5, 5, 5);
tbrow.addView(t5v);
tbrow.setBackgroundResource(R.color.colorWhite);
tbrow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TableRow tr1=(TableRow)v;
TextView tv1= (TextView)tr1.getChildAt(0);
//Get the integer value of tv1 to make the corresponding edittext to be visible
t5v.setVisibility(View.VISIBLE);
Toast.makeText(getApplicationContext(),tv1.getText().toString(),Toast.LENGTH_SHORT).show();
}
});
stk.addView(tbrow);
}
J'ai trouvé le même genre de questions posées dans How to Set Id in EditText programmatically in Android et Android: Set Edit text or text view id Programmatically dans laquelle, solution fournie à utiliser editText.setId (i) où i est une valeur entière. mais cela ne m'a pas aidé avec ma situation.
Merci pour la réponse. Mais je veux créer une liste de EditText et lui assigner un ID par programme. Je ne peux pas utiliser le fichier xml pour définir l'identifiant de l'EditText. Comme je n'ai aucune connaissance sur le nombre de EditText qui peut être créé car il dépend du nombre d'enregistrement existant dans la table à partir de laquelle je vais chercher pour afficher l'enregistrement en utilisant la mise en page de table. – Param
@Param alors au lieu d'utiliser les ids du fichier xml, vous pouvez utiliser 'et.setId (View.generateViewId())'. Permettez-moi de savoir si cela fonctionne. – yrazlik