Dans mon projet, editext
champs (RARnom avec prix) dans chaque élément de recyclerview
, quand je click
sur Enregistrer besoin d'obtenir toutes les valeurs de champ dans une liste de string
, aussi quand J'ai entré des valeurs après que les valeurs de défilement ont été échangées. Voici mon code.Comment obtenir des valeurs de EditExt de recyclerview dans une liste de chaînes
private class PricesAdapter extends RecyclerView.Adapter<PricesAdapter.MyViewHolder> {
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_cars_type_item, parent, false);
return new MyViewHolder(layoutView);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.tvCarType.setText(carsList.get(position));
holder.edtPrice.setText("");
holder.edtPrice.setTag(position);
}
@Override
public int getItemCount() {
return carsList.size();
}
@Override
public int getItemViewType(int position) {
return super.getItemViewType(position);
}
public class MyViewHolder extends RecyclerView.ViewHolder {
TextView tvCarType;
EditText edtPrice;
public MyViewHolder(View itemView) {
super(itemView);
tvCarType=(TextView)itemView.findViewById(R.id.tvCarType);
edtPrice=(EditText)itemView.findViewById(R.id.edtPrice);
}
}
}
}
Voici la méthode pour obtenir la liste des chaînes à partir des valeurs editext.
public List<string> getPriceValues(){
List<String> priceList = new ArrayList<>();
for (int i = 0; i < carsList.size(); i++) {
View viewHolder=rvPrices.getRootView();
View view1=mLayoutManager.findViewByPosition(i);
View view=rvPrices.getChildAt(i);
View root=rvPrices.getRootView();
// PricesAdapter.MyViewHolder myViewHolder=(PricesAdapter.MyViewHolder)rvPrices.findViewHolderForLayoutPosition(i);
// String price=myViewHolder.edtPrice.getText().toString().trim();
EditText edtPrice=(EditText) view.findViewById(R.id.edtPrice);
String price = edtPrice.getText().toString().trim();
priceList.add(price);
}
return priceList;
}
Voici l'erreur que j'ai.
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
'également lorsque j'ai entré des valeurs après le défilement des valeurs de défilement. '. Vous devriez d'abord résoudre cette 'fonctionnalité'. Cela n'a aucun sens de s'attaquer à d'autres problèmes en premier. – greenapps
Un 'RecyclerView' supprime réellement' Views' quand ils ne sont plus visibles, donc, il n'est pas possible de récupérer des valeurs edittext à partir de lignes invisibles. Sauf si vous mettez en cache ces valeurs dans votre application. –
'view.findViewById (R.id.edtPrice);'. Vous avez découvert que votre NullPointerException provient de cette déclaration? Eh bien c'est le cas. Donc voir == null. Vérifiez avant utilisation. Vous ne pouvez plus obtenir le texte d'éditions appartenant à des vues qui ne sont plus visibles. – greenapps