Holen Sie sich die EditText-Werte von ListView
Ich versuche die Werte aus den EditTexts in einem ListView, aber es funktioniert nicht. Die Werte, die meine array 'lista' in der afterTextChanged Methode sind scheinbar verloren. Ich bin neu in der android-Programmierung, kann mir jemand helfen? (sorry für schlechtes Englisch)
Hier ist der code für die getView in meinem adapter:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
final int posicao = position;
if (convertView == null) {
LayoutInflater inflater = contexto.getLayoutInflater();
convertView = inflater.inflate(R.layout.produtos, null);
holder = new ViewHolder();
holder.texto = (TextView) convertView.findViewById(R.id.txtDescricao);
holder.checkbox = (CheckBox) convertView.findViewById(R.id.chkProduto);
holder.edit = (EditText) convertView.findViewById(R.id.txtValor);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.texto.setText(getItem(position).getTexto());
holder.edit.setText("0");
holder.edit.setTag(new LinhaItemTag(getItem(position), position));
//here a get an exception just setting the focus on edit
holder.edit.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
int posicao = v.getId();
EditText e = ((EditText) v);
if (!e.getText().toString().equals("")) {
if (hasFocus) {
if(e.getText().toString().length() != 0)
lista.get(posicao).setValor(Double.parseDouble(e.getText().toString()));
}
}
}
});
holder.edit.addTextChangedListener( new TextWatcher() {
public void afterTextChanged(Editable s)
{
if(s.length() != 0)
{
lista.get(posicao).setValor(Double.parseDouble(s.toString()));
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
//TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
//TODO Auto-generated method stub
}
});
holder.checkbox.setOnCheckedChangeListener(null);
holder.checkbox.setChecked(getItem(position).Selecionado());
holder.checkbox.setTag(new LinhaItemTag(getItem(position), position));
holder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
LinhaItemTag elemento = (LinhaItemTag) buttonView.getTag();
elemento.item.setSelecionado(isChecked);
if (isChecked) {
pegos[elemento.position] = true;
} else {
pegos[elemento.position] = false;
}
boolean checados = true;
for (int i = 0; i < lista.size(); i++) {
if (!pegos[i]) {
checados = false;
break;
}
}
if (checados) {
for(int i = 0; i < lista.size(); i++)
{
total += lista.get(i).getValor();
}
Toast.makeText(contexto, "Compra finalizada - Valor Total: " + total, Toast.LENGTH_LONG).show();
}
}
});
return convertView;
}
}
Ich es geschafft, die Werte aus den EditTexts suchen bei diesem post: gewusst wie: abrufen von Wert aus allen EditText in ListView
Bu nun, ich Stand mit einem anderen problem: wenn ich roll meine Liste nach unten, die Werte aus den EditTexts verloren.
Dies ist, wie mein code sieht jetzt:
public class MeuAdapter extends ArrayAdapter<LinhaItem> {
private final List<LinhaItem> lista;
private final Activity contexto;
private final boolean[] pegos;
private final double[] valores;
double total;
public MeuAdapter(Activity contexto, List<LinhaItem> lista) {
super(contexto, 0, lista);
this.contexto = contexto;
this.lista = lista;
pegos = new boolean[lista.size()];
valores = new double[lista.size()];
for (int i = 0; i < lista.size(); i++) {
pegos[i] = false;
valores[i] = 0;
}
total = 0;
}
public class ViewHolder
{
protected TextView texto;
protected CheckBox checkbox;
protected EditText edit;
}
public class LinhaItemTag {
LinhaItem item;
int position;
LinhaItemTag(LinhaItem item, int position) {
this.item = item;
this.position = position;
}
}
private class MeuTextWatcher implements TextWatcher {
private View v;
public MeuTextWatcher(View v)
{
this.v = v;
}
@Override
public void afterTextChanged(Editable e) {
String s = e.toString();
LinhaItemTag lTag = (LinhaItemTag) v.getTag();
if(s.length() != 0)
{
valores[lTag.position] = Double.parseDouble(s);
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
//TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
//TODO Auto-generated method stub
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
LayoutInflater inflater = contexto.getLayoutInflater();
convertView = inflater.inflate(R.layout.produtos, null);
holder = new ViewHolder();
holder.texto = (TextView) convertView.findViewById(R.id.txtDescricao);
holder.checkbox = (CheckBox) convertView.findViewById(R.id.chkProduto);
holder.edit = (EditText) convertView.findViewById(R.id.txtValor);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.texto.setText(getItem(position).getTexto());
holder.edit.setText("");
holder.edit.setTag(new LinhaItemTag(getItem(position), position));
holder.edit.addTextChangedListener(new MeuTextWatcher(holder.edit));
holder.checkbox.setOnCheckedChangeListener(null);
holder.checkbox.setChecked(getItem(position).Selecionado());
holder.checkbox.setTag(new LinhaItemTag(getItem(position), position));
holder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
LinhaItemTag elemento = (LinhaItemTag) buttonView.getTag();
elemento.item.setSelecionado(isChecked);
if (isChecked) {
pegos[elemento.position] = true;
} else {
pegos[elemento.position] = false;
}
boolean checados = true;
for (int i = 0; i < lista.size(); i++) {
if (!pegos[i]) {
checados = false;
break;
}
}
String vlrs = "";
if (checados) {
for(int i = 0; i < lista.size(); i++)
{
total += valores[i];
}
Toast.makeText(contexto, "Total da compra: " + total, Toast.LENGTH_LONG).show();
}
}
});
return convertView;
}
}
Ich die Zeile ändern:
holder.edit.setText("");
:
//the valores array is where i store the values in the afterTextChanged method in the TextWatcher class implementation.
holder.edit.setText(**Double.toString(valores[position])**);
Aber das funktioniert nicht so, wie ich erwarten, wenn ich zum Beispiel einen Wert fest, der die EditText der ersten Zeile der ListView, diesen Wert habe ich nach unten Rollen die Liste ist setted zu EditText in der Dritten Zeile der Liste...
InformationsquelleAutor Danilo Silva | 2012-12-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
To get die Werte aus der
EditText
in IhremListView
könnten Sie das in Ihrer Tätigkeit. Sie müssen die Werte, auf einige der anzeigen klicken, oder so etwas. Also wenn das passiert, einfach den folgenden code schreibenHier der obige code geben Sie den text der
EditText
ist, dass in derposition
position IhrerListView
. Es scheint, dass Sie brauchen, die Summe der Werte des EditTexts wenn alle aktiviert sind richtig? Sie können so etwas wie dies dannKönnte Sie post ein Bild von Ihrem Bedarf? Was ist, dass Sie wollen? Ich bin immer noch nicht klar!
Alles, was ich brauche, bekommen Sie die Summe der Werte aus den EditTexts in einem ListView, wenn alle Checkboxen in dieser Liste überprüft werden, nehme ich in den neuen code, den ich oben gepostet hast.
Ich habe das problem gelöst, der sich aus der Summe der Werte, wie ich bereits in meinem post bearbeitet, jetzt ist das problem, wenn ein roll-down-Liste die Werte von den Änderungen sind verloren.
Die Werte sind verloren, da das ListView-Steuerelement verwendet den Komponenten. In der getView() der adapter-speichern Sie die Werte des editTexts zuweisen und wieder auf Sie!
InformationsquelleAutor Antrromet
ändern Sie in der adapter-Klasse getView () - Methoden Aussehen.
InformationsquelleAutor MalhotraUrmil
hi kannst du folgenden code verwenden, um dies zu tun, listview nicht speichern der Controller-Status auf der Zeile, so müssen Sie settag und gettag der Kontrollen.
für Quelle: https://dl.dropbox.com/u/68130108/ListViewEditItem.rar
haben Sie Ihr problem lösen?
keine talhakosen das problem ist nicht gelöst, die Einstellung, die den Fokus auf Bearbeiten, bekomme ich eine exception mit dem code, den ich bearbeitet haben, hinzufügen die setOnFocusChangeListener
wenn Sie können senden Sie Ihren code für mich, ich verstehe nicht, wei es funktioniert nicht. [email protected]
können Sie ein update für die source-code-link? es funktioniert nicht! bitte legen Sie es in github!
InformationsquelleAutor Talha
Verlieren die Werte aus EditTexts lästig sein kann, als weit. Ich fand diese Lösung während der Arbeit.
In Ihrem android-manifest, wählen Sie die Aktivität, welche der Listen-Ansicht ist. Dann diesen code-block gibt.
Dann gehen Sie zu Ihrem
ListView
, und navigieren Sie zu der xml-layout und setzen dieses Blocks gibt.InformationsquelleAutor Gayashan Perera