Comment transmettre des valeurs de RecycleAdapter à MainActivity ou d'Autres Activités
Je suis en train de travailler sur un panier d'application,les Éléments sont affichés ci-dessous.Il y a un plus, moins (+/-) des boutons pour choisir le nombre de la quantité.
Si la quantité de produits est modifié, j'ai besoin de passer "productname" et "quantité" à l'activité principale de sorte que je pouvais les utiliser pour préparer la finale du panier. J'ai quelques suggestions pour l'utilisation de la base de données ou de certains fournisseurs de contenus,
Je ne suis pas sûr de la façon de le faire.., s'il vous plaît aider
MainActivity.java
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.Window;
import android.widget.Toast;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
RecycleAdapter recycleAdapter;
List<HashMap<String, String>> onlineData;
ProgressDialog pd;
Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = (RecyclerView) findViewById(R.id.recyle_view);
toolbar= (Toolbar) findViewById(R.id.anim_toolbar);
setSupportActionBar(toolbar);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getBaseContext());
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setHasFixedSize(true);
final String url = "http://www.qa4.org/?json=get_recent_posts&count=45";
new AsyncHttpTask().execute(url);
}
public class AsyncHttpTask extends AsyncTask<String, Void, Integer> {
@Override
protected void onPreExecute() {
pd=new ProgressDialog(MainActivity.this);
pd.requestWindowFeature(Window.FEATURE_NO_TITLE);
pd.setMessage("Loading please wait...");
pd.setCancelable(false);
pd.show();
}
@Override
protected Integer doInBackground(String... params) {
Integer result = 0;
HttpURLConnection urlConnection;
try {
URL url = new URL(params[0]);
urlConnection = (HttpURLConnection) url.openConnection();
int statusCode = urlConnection.getResponseCode();
//200 represents HTTP OK
if (statusCode == 200) {
BufferedReader r = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
StringBuilder response = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
response.append(line);
}
parseResult(response.toString());
result = 1; //Successful
} else {
result = 0; //"Failed to fetch data!";
}
} catch (Exception e) {
e.printStackTrace();
}
return result; //"Failed to fetch data!";
}
@Override
protected void onPostExecute(Integer result) {
//Download complete. Let us update UI
pd.dismiss();
if (result == 1) {
recycleAdapter = new RecycleAdapter(MainActivity.this,onlineData);
recyclerView.setAdapter(recycleAdapter);
} else {
Toast.makeText(MainActivity.this, "Failed to fetch data!", Toast.LENGTH_SHORT).show();
}
}
}
private void parseResult(String result) {
try {
JSONObject response = new JSONObject(result);
JSONArray posts = response.optJSONArray("posts");
onlineData = new ArrayList<>();
for (int i = 0; i < posts.length(); i++) {
JSONObject post = posts.optJSONObject(i);
HashMap<String, String> item = new HashMap<>();
item.put("title", post.optString("title"));
JSONArray jsonArray = post.getJSONArray("attachments");
JSONObject jsonObject1 = jsonArray.getJSONObject(0);
JSONObject jsonArrayImages = jsonObject1.getJSONObject("images");
JSONObject jsonArrayThumb = jsonArrayImages.getJSONObject("thumbnail");
item.put("thump", jsonArrayThumb.optString("url"));
onlineData.add(item);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
RecycleAdapter.java
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.squareup.picasso.Picasso;
import java.util.HashMap;
import java.util.List;
public class RecycleAdapter extends RecyclerView.Adapter<RecycleAdapter.ViewHolderRec> {
List<HashMap<String, String>> onlineData;
SQLiteDatabase db;
Context context;
RecycleAdapter(Context context,List<HashMap<String, String>> onlineData){
this.onlineData = onlineData;
this.context=context;
}
@Override
public ViewHolderRec onCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewHolderRec( LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recycle, parent, false));
}
@Override
public void onBindViewHolder(ViewHolderRec holder, int position) {
HashMap<String,String> map =onlineData.get(position);
//Download image using picasso library
Picasso.with(context).load(map.get("thump"))
.error(R.drawable.placeholder)
.placeholder(R.drawable.placeholder)
.into(holder.iv);
holder.tv.setText(map.get("title"));
}
@Override
public int getItemCount() {
return onlineData.size();
}
public class ViewHolderRec extends RecyclerView.ViewHolder implements View.OnClickListener{
ImageView iv;
TextView tv, quantity;
ImageView Add_Cart;
ImageView Remove_Cart;
public ViewHolderRec(View itemView) {
super(itemView);
iv = (ImageView) itemView.findViewById(R.id.thumbnail);
tv = (TextView) itemView.findViewById(R.id.title);
quantity = (TextView)itemView.findViewById(R.id.cart_qty);
Add_Cart = (ImageView)itemView.findViewById(R.id.cart_add);
Remove_Cart = (ImageView)itemView.findViewById(R.id.cart_remove);
itemView.setOnClickListener(this);
Add_Cart.setOnClickListener(this);
Remove_Cart.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v.getId() == Add_Cart.getId())
{
increment();
}
else if(v.getId() == Remove_Cart.getId())
{
decrement();
}
}
public void increment(){
int currentNos = Integer.parseInt(quantity.getText().toString()) ;
quantity.setText(String.valueOf(++currentNos));
}
public void decrement(){
int currentNos = Integer.parseInt(quantity.getText().toString()) ;
quantity.setText(String.valueOf(--currentNos));
}
}
}
Comment faire,
Vous pouvez utiliser
Helper Class
.
OriginalL'auteur Joseph Joseph | 2016-01-26
Vous devez vous connecter pour publier un commentaire.
Vous devez créer d'interface, et de l'activité implémente cette interface.
Lorsque vous créez un adaptateur (dernier paramètre est cette interface)
//Adaptateur
OriginalL'auteur Phuoc Huynh
Je n'ai pas réussi à le faire avec à la fois l'Interface et le modèle Observateur. Mais de Diffusion Locale a travaillé pour moi.
Adaptateur
Activité Principale
Travaillé dans Kotlin trop (avec Android Studio auto convertisseur).
J'ai utilisé ce code pour ma question, dans la et il travaille tout, seulement j'ai besoin de faire quelques changements.
OriginalL'auteur Joseph Joseph
Populaire trois façons de résoudre ce problème
Phuoc Huynh a déjà expliqué comment utiliser les interfaces pour résoudre ce problème.
Essayer de googler autour d'observateur pour comprendre comment il fonctionne. Nous allons enregistrer les classes qui souhaitent recevoir des événements avec le type d'événements qu'ils souhaitent recevoir. Il y aura un gestionnaire de classes pour gérer l'enregistrement et l'annulation de l'inscription de récepteurs et aussi pour envoyer les événements de tous les récepteurs
Votre MainActivity va s'inscrire en tant que récepteur d'incrémentation et de décrémentation événements et également de mettre en œuvre méthode onEvent de IEventListener
En vous adaptateur classe d'envoyer les événements
LocalBroadcasts fonctionne de la même façon que l'exemple ci-dessus. vous devez créer une Instance de la LocalBroadcastManger et de Diffusion. Définir un récepteur de radiodiffusion dans le onCreate de l'activité et de l'enregistrer à l'aide de registerReceiver() dans l'Activité. Passer un filtre d'intention dans le registre récepteur avec actiontype même que les émissions que vous voulez de votre activité à recevoir. Assurez-vous d'annuler l'enregistrement des émissions à chaque fois que vous n'en avez pas besoin ou dans le onDestroy de l'activité
Ouais, pouvez-vous s'il vous plaît montrer un peu de code , comment faire pour les mettre en œuvre
OriginalL'auteur Suhaib Roomy
Vérifier cela. Il fonctionne pour moi.
Suffit de Coller dans Votre Activité ou Fragment
OriginalL'auteur Aasik
ajouter ces codes dans onBindViewHolder
Ajouter sur MainActivity
OriginalL'auteur Ali Eslami
OriginalL'auteur Tousif Akram