web-dev-qa-db-fra.com

Android: Définir Modifier le texte ou l'identifiant d'affichage du texte par programme

Je développe une application dans laquelle je crée un Edittext par programme comme:

EditText edText = new EditText(this);
edText.setId(1);
edText .setLayoutParams(new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT,0f));
edText .setInputType(InputType.TYPE_CLASS_NUMBER);
edText.setHint("dsgsdgsgs");
tableLayout.addView(edText);

Ici, je mets l'identifiant du texte d'édition à "1" par la ligne edText.setId(1); en entier.

Mais ce dont j'ai besoin, c’est - je veux définir l’ID en caractère, comme par exemple:

edText.setId("edittext_hello");

Pour que je puisse y accéder via cet identifiant. Comment puis-je accomplir cette tâche s'il vous plaît aider.

8
Optim India

Vous ne pouvez pas définir l'identifiant en tant que chaîne. Vous pouvez uniquement attribuer un entier à Id. Mais si vous voulez utiliser String comme id pour la facilité d’utilisation, alors dans res/values ​​/ ids.xml file

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <item name="edit_text_hello" type="id"/>

</resources>

Et puis utilisez-le comme:

edText.setId(R.id.edit_text_hello);

Vous pouvez donc faire ce dont vous avez besoin.

15
Manoj Fegde

Comme les autres l'ont dit, vous ne pouvez pas faire cela. Pourquoi voulez-vous/quelle est votre exigence?

Vous pouvez créer un id dans un fichier XML et l'utiliser - si vous voulez que ce soit descriptif. C'est également une meilleure approche que d'utiliser des ints littéraux, car vous risquez d'obtenir une collision id avec d'autres vues de la hiérarchie de la disposition (peu probable mais possible). Cela me semble être la meilleure solution/la plus propre à votre problème.

Voir http://developer.Android.com/guide/topics/resources/more-resources.html#Id

par exemple. dans res/values/id.xml

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

puis mis avec

edText.setId(R.id.edittext_hello);
20
Dori

Non, vous ne pouvez pas définir id en tant que chaîne. Vous ne pouvez affecter que integer en tant qu'id. Vous pouvez utiliser setTag() of View avec String. Mais pour id ce ne sera que Integer. Comme les ressources Android sont gérées dans un fichier R.Java pour le type entier.

Mettre à jour:

Pourquoi ne définissez-vous pas String ou d'autres types de données (sans entier) id sur une ressource Android?

Parce que:

Un identifiant de ressource Android est un entier de 32 bits. Il comporte

an 8-bit Package id [bits 24-31]
an 8-bit Type id [bits 16-23]
a 16-bit Entry index [bits 0-15]

Le ID du package identifie le bloc Package qui contient la ressource.

Le Type id identifie le type de la ressource et, par conséquent, le fragment Typespec et le ou les fragments Type qui contiennent sa valeur ou ses valeurs.

Le index d'entrée identifie la ressource individuelle dans le bloc Typespec et le ou les blocs Type.

4
user370305

Vous ne pouvez pas définir id avec char, String ou quoi que ce soit d'autre que int... car id est maintenu par le fichier R.Java qui ne contient que int.

Vous pouvez utiliser setTag() au lieu de setId().

Utilisez setTag() comme ci-dessous ...

edText.setTag("edittext_hello");
3
Hamid Shatu

Vous pouvez également résoudre votre problème sans créer aucune ressource supplémentaire telle que ids.xml et sans définir aucun identifiant sur aucun des EditText créés dynamiquement.

Il suffit d’avoir la référence parent de l’élément pour lequel vous avez défini une balise, puis vous pouvez la trouver avec la balise.

Parent

LinearLayout linearLayout= (LinearLayout) findViewById(R.id.layout_id);

et alors

Enfants

EditText editText = (EditText) linearLayout.findViewWithTag("yourStringTag");

par exemple..

Remarque: Évidemment, si vous avez créé EditTexts de manière dynamique, vous feriez quelque chose comme ceci:

for (Map.Entry<String, String> entry : yourHashMap.entrySet()) {

LinearLayout linearLayout= (LinearLayout) findViewById(R.id.parent_layout_id);

EditText editText = (EditText) linearLayout.findViewWithTag(entry.getKey());

// Then do whatever you want with your editText referenced.
// ...

}
0
FLBKernel