2017-05-12 2 views
0

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.

Répondre

0

J'ai suivi les étapes ci-dessous pour définir les ID pour le EditText créé par programme et pour récupérer les données entrées dans le edittext.

Étape 1: déclaration globale pour edittext et variable int comme

int idOfEditText; 
EditText t5v; 

Étape 2: Configuration Id pour editText comme

t5v = new EditText(this); 
t5v.setId(Integer.valueOf(j)); //I tried with just j being declared as t5v.setId(j); but it was showing up error with the suggestion as Expected resource of type id in android studio. I have made int variable **j** to loop till list.size() 

Étape 3: l'identifiant de la ligne onclick sur la table utilisant

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 
       idOfEditText = Integer.valueOf(tv1.getText().toString()); 
       t5v = (EditText) findViewById(idOfEditText); 

      } 
     }); 

Étape 4: Les données saisies dans l'EditText peuvent être récupérées par

t5v = (EditText) findViewById(idOfEditText); 
String value = t5v.getText().toString(); 
Toast.makeText(this, "You entered: "+value, Toast.LENGTH_SHORT).show(); 
0

Vous pouvez créer un ID personnalisé dans un fichier XML et définir cet ID à l'aide de la méthode setId(). Voici les étapes à suivre pour cela:

1) Créez le fichier ids.xml sous le répertoire res/values.

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <item name="my_custom_id" type="id" /> 
</resources> 

2) Ensuite, créez votre point de vue et définir son programme id:

EditText et = new EditText(getContext()); 
et.setId(R.id.my_custom_id); 

Cela devrait faire l'affaire.

EDIT: Vous pouvez également faire ce qui suit si vous ne connaissez pas le nombre de vues à créer et ne peut pas utiliser ids de fichier xml:

et.setId(View.generateViewId()); 

La méthode generateViewId() crée un identifiant unique aléatoire pour toi.

+0

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

+0

@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