Comment obtenir les valeurs de tous les EditText à l'intérieur d'une ListView
Je veux obtenir toutes les valeurs de tous les EditText éléments qui sont présents à l'intérieur de ma ListView.
C'est mon code :
final ListView editorList = (ListView) findViewById(R.id.editorList);
final EditorAdapter adapter = new EditorAdapter(context, data);
editorList.setAdapter(adapter);
Button commitButton = (Button) findViewById(R.id.commit_button);
commitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//TODO Auto-generated method stub
try{
//System.out.println("Size of List : " + editorList.getChildCount());
for(int i =0;i< data.size() ;i++){
System.out.println("Size of List : " + data.size());
EditText value = adapter.getItem(i);
String propertyValue = value.getText().toString();
System.out.println("PropertyValue : " + propertyValue);
}
} catch (Exception e){
e.printStackTrace();
}
}
});
C'est ma classe d'Adaptateur :
package in.omerjerk.preferenceseditor;
public class EditorAdapter extends BaseAdapter {
Context context;
ArrayList<HashMap<String,String>> data;
EditText[] mHolders;
public EditorAdapter(Context context, ArrayList<HashMap<String,String>> data){
this.context = context;
this.data = data;
System.out.println("No . of items in nodes"+data.size());
mHolders = new EditText[data.size()];
}
@Override
public int getCount() {
//TODO Auto-generated method stub
return data.size();
}
@Override
public EditText getItem(int pos) {
//TODO Auto-generated method stub
return mHolders[pos];
}
@Override
public long getItemId(int pos) {
//TODO Auto-generated method stub
return pos;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//TODO Auto-generated method stub
ViewHolder holder;
if(convertView==null){
System.out.println("CONVERT VIEW IS NULL");
holder = new ViewHolder();
convertView = LayoutInflater.from(context).inflate(R.layout.row_edit_string,null,false);
holder.editPropertyValue = (EditText) convertView.findViewById(R.id.propertyValue);
holder.propertyName = (TextView) convertView.findViewById(R.id.propertyName);
holder.propertyName.setText(data.get(position).get("propertyName"));
holder.editPropertyValue.setText(data.get(position).get("propertyName"));
convertView.setTag(holder);
}else{
System.out.println("CONVERT VIEW NOT NULL");
holder = (ViewHolder) convertView.getTag();
holder.propertyName.setText(data.get(position).get("propertyName"));
holder.editPropertyValue.setText(data.get(position).get("propertyName"));
convertView.setTag(holder);
mHolders[position] = new EditText(context);
mHolders[position] = holder.editPropertyValue;
}
return convertView;
}
}
Je suis étrange erreur de ma sortie. Le mHolders tableau uniquement contenir jusqu'à 6 à 7 éléments et ces éléments sont repris dans le tableau d'ensemble. Je suis en mesure d'obtenir les valeurs de EditText mais l'erreur n'est pas correct.
post XML de mise en page, merci
Post EditorAdapter ainsi
J'ai mis à jour le code.
Vous êtes à la création d'un nouveau
les valeurs que vous essayez d'obtenir, sont sur la carte ou sont entrés par l'utilisateur?
Post EditorAdapter ainsi
J'ai mis à jour le code.
Vous êtes à la création d'un nouveau
View
chaque fois getView
est appelé, ce qui est très mauvais et le mal. Et aussi votre code ne suivez pas ViewHolder
modèle. Merci de corriger votre adaptateur. Beaucoup de tutoriels sont disponibles sur ce sujet, javacodegeeks.com/2013/09/...les valeurs que vous essayez d'obtenir, sont sur la carte ou sont entrés par l'utilisateur?
OriginalL'auteur omerjerk | 2013-10-06
Vous devez vous connecter pour publier un commentaire.
Cela ne va pas fonctionner de la même manière que vous attendez. Les vues sont recyclés lors de l'utilisation d'un
Adapter
. Cela signifie qu'il ya seulement que de nombreux gonflé points de vue qu'il sont visibles à l'écran (en plus d'un couple). Donc, si vous essayez d'effectuer une itération sur tous les enfants, vous trouverez que tous les éléments à l'écran retournera null.La bonne façon de le faire est d'utiliser un
Collection
des objets qui représentent les valeurs de laEditText
que votreAdapter
de données. De cette façon, dansgetView
il vous suffit de cocher la valeur de l'objet à cette position, et ensuite appelersetText()
sur la vue. Lorsque vous voulez obtenir toutes les valeurs, vous créez une méthode commegetItems()
dans leAdapter
, et itérer sur queCollection
.Si vous publiez les parties pertinentes de la
Adapter
code, je peux vous montrer exactement comment le faire.OriginalL'auteur Paul Burke
Essayer de cette façon, et de la modifier selon vos besoins. J'ai utilisé la liste de tableaux de HashMap au lieu de NodeList
activity_main.xml
row_edit_string.xml
MainActivity
EditText
champs effectuée par l'utilisateur seront reflétées dans lesgetAllValue.setOnClickListener()
une fois qu'une modification est faite dans l'edittext, vous aurez à réfléchir quelque part, ou dans la même liste que vous utilisez dans l'adaptateur. c'est parce que, chaque fois que vous faites défiler si les valeurs ne sont pas stockés correctement, vous devrez remplir votre edittext avec les anciennes valeurs. De cette façon, à chaque fois qu'une modification est faite par l'utilisateur, il ne serait jamais réfléchi, cz de ses jamais retenu à tous
J'ai mis à jour ma question. Pouvez vous s'il vous plaît jeter un oeil.
OriginalL'auteur Haresh Chhelana
Je suis maintenant de copier vos question et de vous donner une solution rapide. Gardez à l'esprit que votre code n'est pas optimisé et que mon code n'est pas optimisé. Par ailleurs, je viens d'écrire mon code, il n'a même pas été testé du point de vue syntaxique.
L'idée est de garder la trace de chacun des EditText valeurs. J'ai utilisé une table de hachage.
C'est votre nouvelle Carte de classe :
Maintenant, nous allons nous mettre à jour votre onClick. Le seul problème ici est que mValues n'est pas suffisant parce que la table de hachage garantit uniquement les valeurs de rebut et/ou réutilisés convertViews mais pas les valeurs de EditTexts déjà sur l'écran.
OriginalL'auteur Sherif elKhatib
Essayer de cette façon, espérons que cette aide vous
OriginalL'auteur Biraj Zalavadia
Pourquoi n'essayez-vous pas le défilement de l'affichage avec conteneur qui contient la liste de vos éléments, comme des enfants. sur l'écouteur de clics vous pouvez parcourir tous les enfants et de trouver les valeurs qui sont entrés dans l'edittext. Si n'avez pas vraiment besoin de la liste, vous pouvez essayer quelque chose comme cela.
OriginalL'auteur Samuel Robert