Comment configurer l'Id de la création dynamique créée?

Je souhaite donner de l'identité à certaines vues (vision du texte, vision d'image, etc.) dans une mise en page créée de façon programmée. Alors, quelle est la meilleure façon de définir l'ID?

  • Dimension de la boîte de dialogue de taille fixe Android - Qu'est-ce que Major & Minor?
  • La commutation de contexte utilise-t-elle un temps important?
  • Intercepter le bouton de retour
  • Obtenir uniquement l'adresse électronique de la liste de contacts Android
  • Bad 'Patches' dans le fichier de 9 patchs
  • En-tête de cookie non valide: Impossible d'analyser l'attribut expires à l'expiration est vide
  • 7 Solutions collect form web for “Comment configurer l'Id de la création dynamique créée?”

    Vous créez un fichier ids.xml et placez tous vos identifiants requis comme suit

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

    Maintenant, pour vos mises en page ou vues créées dynamiquement, vous pouvez utiliser ces identifiants comme ci-dessous

     new_layout1.setId(R.id.layout1); new_view2.setId(R.id.layout2); new_layout3.setId(R.id.layout3); 

    J'espère que cela vous aidera.

    Créer dossier res/values/ids.xml et

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

    Dans la classe d'activité, appelez-en comme ça

     ImageView refreshImg = new ImageView(activity); ImageView settingsImg = new ImageView(activity); refreshImg.setId(R.id.refresh); settingsImg .setId(R.id.settings); 
     int id=100+1; layout.setId(id); 

    Google s'est enfin rendu compte de la nécessité de générer des identifiants uniques pour les vues créées par programme …

    À partir du niveau API 17 et supérieur, une fois peut appeler View.generateViewId ()

    Si vous mettez un groupe de composants à plusieurs reprises dans une mise en page par programme ci-dessous:

     <LinearLayout> <ImageView> <TextView> <Button> <ImageView> <TextView> <Button> <ImageView> <TextView> <Button> ... </LinearLayout> 

    Alors, vous pouvez utiliser pour la boucle et donner des identifiants en conséquence:

     for(int i=0;i<totalGroups;i++) { ImageView img; TextView tv; Button b; ... // set other properties of above components img.setId(i); tv.setId(i); b.setId(i); ... //handle all events on these components here only ... //add all components to your main layout } 

    Ou si vous ne souhaitez qu'un groupe de composant que vous souhaitez ajouter, vous pouvez utiliser n'importe quel nombre entier important et ne pas entrer en conflit avec les identifiants d'un autre composant dans Resources.It ne sera pas très conflictuel.

    Vous pouvez définir vos ID en tant que ressources, puis utiliser setId () de la vue pour la configurer. Dans un fichier xml, définissez les ID comme:

     <resources> <item type="id">your id name</item> </resources> 

    Puis, utilisez dans le fichier java sous .. layout.setId (R.id.)

    Essayez ce code! Cela devrait aider à donner une idée.

    Activity_prac_main.xml

     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:text="@string/edit_message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/display_txt" android:textStyle="bold" android:textSize="18sp" android:textAlignment="center" android:layout_gravity="center_horizontal"/> <GridLayout android:id="@+id/my_grid" android:layout_width="match_parent" android:layout_height="wrap_content" android:rowCount="4"> <LinearLayout android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/linear_view"> <Button android:text="@string/button_send" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/my_btn" android:layout_gravity="center_horizontal"/> <TextView android:text="@string/edit_message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/my_txt" android:textSize="18sp" /> </LinearLayout> </GridLayout> </LinearLayout> 

    Voici le reste du code

      public class AnotherActivity extends AppCompatActivity { private int count = 1; List<Integer> gridArray; private TextView myDisplayText; @Override protected void onCreate( Bundle savedInstanceState) { super.onCreate(savedInstanceState); gridArray = new ArrayList<>(); gridArray.add(Integer.valueOf(1)); setContentView(R.layout.activity_prac_main); findViews(); } private void findViews(){ GridLayout gridLayout = (GridLayout)findViewById(R.id.my_grid); gridLayout.setColumnCount(4); LinearLayout linearLayout = (LinearLayout) gridLayout.findViewById(R.id.linear_view); linearLayout.setTag("1"); Button myButton = (Button) linearLayout.findViewById(R.id.my_btn); myButton.setTag("1"); TextView myText = (TextView) linearLayout.findViewById(R.id.my_txt); myText.setText("1"); myDisplayText = (TextView) findViewById(R.id.display_txt); myButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { TextView txt = (TextView) view; myDisplayText.setText("PRESS " + txt.getTag().toString()); if(count < 24) { createView(); } else{ dialogBox(); } } }); } private void createView(){ LinearLayout ll = new LinearLayout(this); ll.setId(Integer.valueOf(R.id.new_view_id)); ll.setTag(String.valueOf(count+1)); Button newBtn = createButton(); newBtn.setId(Integer.valueOf(R.id.new_btn_id)); newBtn.setTag(String.valueOf(count+1)); TextView txtView = createText(); txtView.setId(Integer.valueOf(R.id.new_txt_id)); txtView.setTag(String.valueOf(count+1)); txtView.setText(String.valueOf(count+1)); GridLayout gridLayout = (GridLayout)findViewById(R.id.my_grid); ll.addView(newBtn); ll.addView(txtView); ll.setOrientation(LinearLayout.VERTICAL); gridLayout.addView(ll); count++; } private Button createButton(){ Button myBtn = new Button(this); myBtn.setText(R.string.button_send); myBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { TextView txt = (TextView) view; myDisplayText.setText("PRESS " + txt.getTag().toString()); if(count < 24) { createView(); } else{ dialogBox(); } } }); return myBtn; } public void dialogBox() { AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this); alertDialogBuilder.setMessage("GRID IS FULL!"); alertDialogBuilder.setPositiveButton("DELETE", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { GridLayout gridLayout = (GridLayout)findViewById(R.id.my_grid); gridLayout.removeAllViews(); count = 0; createView(); } }); alertDialogBuilder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { } }); AlertDialog alertDialog = alertDialogBuilder.create(); alertDialog.show(); } private TextView createText(){ TextView myTxt = new TextView(this); myTxt.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18); return myTxt; } } 

    Comme vous pouvez le voir, les identifiants ont été créés dans res -> values ​​-> ids file.

    Lors de la création de vues dynamiquement id est identique pour les vues.

    Chaque TextView partage le même identifiant. Chaque bouton partage le même identifiant. Chaque disposition partage le même identifiant.

    Les ID ne sont importants que pour accéder au contenu des vues.

    Cependant, le Tag est ce qui rend chaque vision l'une de l'autre.

    J'espère que ça vous aide!

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.