J'ai recyclerview où j'affiche les articles avec le nom de l'article, le taux d'objet et la quantité des articles qui sont augmentés et diminués respectivement de boutons +/-. maintenant, je veux obtenir toutes les valeurs de chaque élément de la vue de recyclage et l'envoyer sur le serveur ou l'enregistrer dans la base de données locale, alors comment y parvenir .?
//Ceci est ma classe d'adaptateur
classe publique TeaListAdapter étend RecyclerView.Adapter {
private List<TeaListPOJO> teaList = new ArrayList<> ();
private RecyclerView recyclerView;
private TeaListAdapter mAdapter;
private View view;
private Button btnPlaceorder;
EditText edtmsg;
public String str;
private Context mContext = PlaceOrderActivity.this;
private int itemCount;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
setContentView (R.layout.activity_place_order);
str=getIntent ().getStringExtra ("quantity");
edtmsg= (EditText) view.findViewById (R.id.et_message);
edtmsg.setText (str);
setRecyclerView (view);
getallTeaItems ();
}
List<TeaListPOJO> getTeaItemList(String str) {
Gson gson = new Gson ();
Type listType = new TypeToken<List<TeaListPOJO>> () {
}.getType ();
List<TeaListPOJO> myModelList = gson.fromJson (str, listType);
return myModelList;
}
private List<TeaListPOJO> getallTeaItems() {
if (new AppCommonMethods (mContext).isNetworkAvailable ()) {
WLAPIcalls mAPIcall = new WLAPIcalls (mContext, getString (R.string.getTeaItem), this);
mAPIcall.GetTeaItemList ();
} else {
Toast.makeText (mContext, R.string.no_internet, Toast.LENGTH_SHORT).show ();
}
return null;
}
void setRecyclerView(View view) {
recyclerView = (RecyclerView) findViewById (R.id.recycler_view);
mAdapter = new TeaListAdapter (teaList);
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager (getApplicationContext ());
recyclerView.setLayoutManager (mLayoutManager);
recyclerView.setItemAnimator (new DefaultItemAnimator ());
recyclerView.setAdapter (mAdapter);
}
@Override
public void onClick(View view) {
}
@Override
public void onAPICallCompleteListner(Object item, String flag, String result) throws JSONException {
if (getString (R.string.getTeaItem).equals (flag)) {
Log.e ("Result", result);
teaList = getTeaItemList (result);
setRecyclerView (view);
}
}
}
// Ceci est ma classe d'activité
classe publique PlaceOrderActivity s'étend AppCompatActivity implémente AppConstants, View.OnClickListener, WLAPIcalls.OnAPICallCompleteListener {
//private int num=0;
private List<TeaListPOJO> teaItemList;
private Context mContext;
private Cursor cursor;
int comboCount;
HashMap<Object,Integer> selectedMap = new HashMap ();
private String ItemName;
private String itemrate;
private String qty;
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView tvitemName, tvitemRate,tvcount; //number
public ImageView ivItemImg,ivPlus,ivMinus;
public Button btnIncrease,btnDecrease;
RecyclerView.ViewHolder holder;
public MyViewHolder(View view) {
super(view);
tvitemName = (TextView) view.findViewById(R.id.txt_item_name);
tvitemRate = (TextView) view.findViewById(R.id.txt_item_price);
ivItemImg= (ImageView) view.findViewById (R.id.iv_item);
ivPlus=(ImageView) view.findViewById (R.id.row_view_final_order_iv_plus);
ivMinus=(ImageView) view.findViewById (R.id.row_view_final_order_iv_minus);
tvcount=(TextView) view.findViewById (R.id.row_view_final_order_tv_count);
}
}
public TeaListAdapter(List<TeaListPOJO> teaItemList) {
this.mContext=mContext;
this.cursor=cursor;
this.teaItemList = teaItemList;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.rv_placeorder_items, parent, false);
return new MyViewHolder (itemView);
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
TeaListPOJO tealist = teaItemList.get(position);
holder.tvitemName.setText(tealist.getItemName ());
holder.tvitemRate.setText(AppConstants.INDIAN_RUPEE_SIGN.concat (tealist.getItemRate ()));
holder.ivPlus.setOnClickListener (new View.OnClickListener () {
@Override
public void onClick(View view) {
int count=0;
try{
count = Integer.parseInt(holder.tvcount.getText().toString());
}
catch(Exception e) {
count = 0;
}
//count++;
count = Integer.parseInt(holder.tvcount.getText().toString());
holder.tvcount.setText(String.valueOf(count+ 1));
}
});
holder.ivMinus.setOnClickListener (new View.OnClickListener () {
@Override
public void onClick(View view) {
int count=0;
try{
count = Integer.parseInt(holder.tvcount.getText().toString());
}
catch(Exception e) {
count = 0;
}
if(count>0) {
//count--;
count = Integer.parseInt (holder.tvcount.getText ().toString ());
holder.tvcount.setText (String.valueOf (count - 1));
}
}
});
holder.itemView.setOnClickListener (new View.OnClickListener () {
@Override
public void onClick(View view) {
}
});
/* Intent intent = new Intent (mContext, PlaceOrderActivity.class);
// intent.putExtra("quantity",Integer.parseInt(quantity.getText().toString()));
intent.putExtra ("quantity", qty);
intent.putExtra ("item", ItemName);
intent.putExtra ("itemrate", itemrate);
ItemName = holder.tvitemName.getText().toString();
qty = holder.tvcount.getText().toString();
itemrate=holder.tvitemRate.getText ().toString ();
Log.e("rate",itemrate);
Log.e("qty",qty);*/
byte[] decodedString = new byte[0];
try {
decodedString = Base64.decode(tealist.getImageStr(), Base64.DEFAULT);
// tenantModelPOJO.setLogo(decodedString);
Bitmap bmp = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
holder.ivItemImg.setImageBitmap(Bitmap.createScaledBitmap(bmp, 50, 50,false));
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public int getItemCount() {
return teaItemList.size();
}
}
3 Réponses :
le TeaListPOJO devrait également avoir besoin d'un champ pour stocker le count . Augmentez ou décrémentez la valeur count lorsque l'utilisateur clique sur le bouton + ou - et affichez la valeur count dans la vue de texte, au lieu de l'afficher directement.
public void onBindViewHolder(final MyViewHolder holder, final int position) {
TeaListPOJO tealist = teaItemList.get(position);
.....
.....
holder.ivPlus.setOnClickListener (new View.OnClickListener () {
@Override
public void onClick(View view) {
tealist.setCount( tealist.getCount() + 1);
holder.tvcount.setText(String.valueOf(count));
}
});
holder.ivMinus.setOnClickListener (new View.OnClickListener () {
@Override
public void onClick(View view) {
tealist.setCount(tealist.getCount() - 1)
holder.tvcount.setText (String.valueOf (count));
}
}
});
}
Comment puis-je définir le nombre et le transmettre à la vue de texte
vous devez incrémenter ou décrémenter la valeur de count , j'ajouterai un code pseduo
J'ai ajouté le code, une condition peut également être donnée pour éviter que le décompte ne devienne négatif
c'est un pseudo code, n'utilisez pas le code exact dans votre projet, voyez simplement ce que j'ai fait dans OnClickListener
Je n'ai pas utilisé le code exactement, j'ai juste essayé de définir la valeur de count sur la vue de texte, mais en cliquant sur le bouton, cela ne fonctionne pas correctement
Ajoutez une propriété supplémentaire dans votre modèle TeaListPOJO , dites count lorsque vous appuyez sur le bouton +/-, vous devez définir le nombre dans votre modèle comme vous définissez le nombre dans votre texte vue. Donc, dans votre adaptateur, vous avez la liste TeaListPOJO . Montrez quand vous voulez envoyer des données au serveur obtenez la liste de TeaListPOJO et aussi vous avez la liste de nombre.
Dans l'adaptateur, définissez un appel à l'API pour modifier la valeur dans la base de données. Vous ne devriez pas avoir besoin de transmettre toutes les données, généralement vous pourrez simplement mettre à jour cet objet que vous regardez en passant l'identifiant dans l'URL. par exemple. https: //hostname.domain/api/object/ID Utilisez une requête PUT et transmettez les informations de l'objet dans cette ligne.
Si vous créez également le back-end de ceci, je vous suggère fortement de le configurer car le fait de transmettre l'ensemble de données pour toutes les lignes n'est pas exactement une solution idéale.
Si ceux-ci n'existaient pas au départ et qu'ils ont tous été créés à partir de l'application, un bouton sur votre activité principale enregistre la liste, puis transmettez la liste entière à un appel API, qui aura probablement besoin pour analyser les données dans JSON. Je suppose ici que si ce dernier est le cas, vous avez créé ces objets dans une classe.