Android - chaque EditTexts valeurs de ListView avec personnalisé ArrayAdapter
J'ai une ListView avec un client ArrayAdapter et personnalisé ListItem-XML. Au bas de cette liste, j'ai ajouté un FooterView avec un Bouton. Maintenant, je veux obtenir toutes les valeurs des trois EditTexts dans chacun de mes ListItems lorsque je clique sur ce Bouton.
Voici ci-dessous mon code:
activity_checklistresult.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
result_inner_view.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/item_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center">
<TextView
android:id="@+id/tv_result_amount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/default_margin" />
<EditText
android:id="@+id/et_result_amount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/default_margin"
android:inputType="number" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_vertical"
android:orientation="vertical">
<TextView
android:id="@+id/tv_result_product_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="end"
android:layout_margin="@dimen/default_margin" />
<AutoCompleteTextView
android:id="@+id/actv_search_product"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:singleLine="true"
android:ellipsize="end"
android:layout_margin="@dimen/default_margin"
android:inputType="textAutoComplete" />
</LinearLayout>
<TextView
android:id="@+id/tv_result_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/default_margin" />
<EditText
android:id="@+id/et_result_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/default_margin"
android:inputType="numberDecimal" />
</LinearLayout>
ResultListActivity.java:
public class ChecklistResultActivity extends ListActivity
{
private MyResultAdapter adapt;
private Button confirmButton;
private ChecklistResultActivity rActivity;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_checklistresult);
//Set my Custom ArrayAdapter for this ListActivity
setAdapter();
rActivity = this;
}
private void setAdapter(){
adapt = new MyResultAdapter(this, R.layout.result_inner_view, Controller.getInstance().getOrderedProducts());
setListAdapter(adapt);
//Add the confirm button at the end of the list
addFooterConfirmButton();
}
private void addFooterConfirmButton(){
ListView lv = (ListView)findViewById(android.R.id.list);
FrameLayout footerLayout = (FrameLayout) getLayoutInflater().inflate(R.layout.result_footer_view, null);
confirmButton = (Button)footerLayout.findViewById(R.id.confirm_result_button);
confirmButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
...
//Get all EditText values (and compare them with the Default Value)
}
});
lv.addFooterView(footerLayout);
}
...
MyResultAdapter.java:
public class MyResultAdapter extends ArrayAdapter<OrderedProduct>
{
private Context context;
private int layoutResourceId;
private LayoutInflater inflater;
public MyResultAdapter(Context c, int layoutResourceId, List<OrderedProduct> objects){
super(c, layoutResourceId, objects);
this.layoutResourceId = layoutResourceId;
this.context = c;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
View view = convertView;
if(view == null)
view = inflater.inflate(layoutResourceId, parent, false);
...
return view;
}
}
Dans le ResultListActivity à //Get all EditText values (and compare them with the Default Value)
je veux faire une boucle par tous les OrderedProducts et de comparer les valeurs par défaut de ceux-ci, avec les nouvelles valeurs des deux EditTexts et la AutoCompleteTextView. Alors, comment puis-je obtenir ces valeurs à partir de dans le onClick du Pied de page-Bouton?
Merci d'avance pour les réponses.
utilisation de texte modifier modifier le port d'écoute sur modifier le texte que vous entrez la valeur à modifier le texte à l'époque enregistrer la valeur dans l'objet selon la position, après que vous pouvez obtenir toutes les valeurs de cet objet.
OriginalL'auteur Kevin Cruijssen | 2014-05-30
Vous devez vous connecter pour publier un commentaire.
Votre carte a enregistrer le texte sur modifier pour chaque EditText :
l'id que vous voulez), nous allons utiliser cette balise comme la clé dans la table de hachage
EditText
Adaptateur :
Citation: "//être conscient que vous ne devriez pas faire cela pour chaque appel sur getView, juste une fois par listItem quand convertView est nul", je viens de découvrir que ce n'est pas vrai, vous devez également appeler cette fonction lorsque vous êtes défilement vers le haut ou vers le bas dans la liste, car cela réinitialise les valeurs enregistrées de la EditTexts à leurs valeurs par défaut.
OriginalL'auteur Guian
Vous pouvez stocker tous les edittext valeurs et de les sortir en cas de besoin, vous pouvez les stocker dans afterTextChange ou onTextChange, c'est à vous.
c'est un exemple à l'utilisateur de comprendre la démarche, il n'est pas entièrement la réponse, bien sûr, le reste est à lui de régler sa propre mise en œuvre et la je suis en désaccord avec les performances. Listview est déjà à recycler et à gérer des problèmes de performances. Et ce problème de performances pensez-vous que cela peut entraîner?
Vous êtes à la création de nombreux nouveaux TextWatcher même lorsqu'il n'est pas nécessaire puisque vous avez un convertView avec une déjà mis en TextWatcher de les réutiliser.
Je comprends votre point, mais comme je l'ai dit je suis juste en donnant une approche et il est comment vous pouvez avoir un écouteur à regarder. Je n'avais pas de mettre en œuvre l'ensemble du code, etc, et pas l'intention de le faire. cette initialiser, c'est quand votre convertview est null. Vous pouvez avoir du titulaire motif de garder des références etc etc. Mais tout cela jusqu'à l'utilisateur à mettre en œuvre.
OriginalL'auteur Orhan Obut