Ici, dans mon interface utilisateur, j'ai utilisé deux boutons pour charger différentes données dans un RecyclerView. La première fois que les données s'affichent correctement en cliquant sur chaque bouton. Mais si je clique sur le bouton pour la deuxième fois, les données s'ajoutent deux fois à l'adaptateur. Je veux dire que l'adaptateur n'est pas effacé. c'est continuer à ajouter les données en cliquant sur le bouton. Je pense que je dois faire quelque chose avec l'adaptateur en cliquant sur un bouton. Quelqu'un peut-il me faire savoir comment effacer l'adaptateur ou où je me trompe ..

Voici le code.

public class GstVendorLocRetrieve extends AppCompatActivity {

    private String vault;

    private TextView txt;
    public static final String DATA_URL = "http://oursite.com/getgstvendorlocation.php?vault_no=";
    public static final String DATA_URL1 = "http://oursite.com/getgstcustomerlocation.php?vault_no=";

    //Tags for my JSONRes
    public static final String TAG_VendorID = "VendorID";
    public static final String TAG_CustomerID = "Customer_ID";
    public static final String TAG_ADDRESS = "Address";

    private Button vendor;
    private Button customer;

    //Creating a List of superheroes
    private List<GstVendLoc> listSuperHeroes;
    private List<GstCustLoc> listSuperHeroes1;

    //Creating Views
    private RecyclerView recyclerView;
    private RecyclerView.LayoutManager layoutManager;
    private RecyclerView.Adapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.locationretrieve);

        SharedPreferences sharedPreferences = getSharedPreferences(GstLogin.SHARED_PREF_NAME, MODE_PRIVATE);
        vault = sharedPreferences.getString(GstLogin.EMAIL_SHARED_PREF,"Not Available");

        vendor = (Button) findViewById(R.id.login);
        customer = (Button) findViewById(R.id.login1);

        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        recyclerView.setHasFixedSize(true);
        layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);

        //Initializing our superheroes list
        listSuperHeroes = new ArrayList<>();
        listSuperHeroes1 = new ArrayList<>();

        vendor.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                recyclerView.setAdapter(null);
                getData();
            }
        });

        customer.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                recyclerView.setAdapter(null);
                getData1();
            }
        });

    }

    //This method will get data from the web api
    private void getData(){
        //Showing a progress dialog
        final ProgressDialog loading = ProgressDialog.show(this,"Loading Data", "Please wait...",false,false);

        //Creating a json array request
        JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(DATA_URL+vault,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        //Dismissing progress dialog
                        loading.dismiss();

                        //calling method to parse json array
                        parseData(response);
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {

                    }
                });

        //Creating request queue
        RequestQueue requestQueue = Volley.newRequestQueue(this);

        //Adding request to the queue
        requestQueue.add(jsonArrayRequest);
    }

    //This method will parse json data
    private void parseData(JSONArray array){
        for(int i = 0; i<array.length(); i++) {
            GstVendLoc gst1 = new GstVendLoc();
            JSONObject json = null;
            try {

                json = array.getJSONObject(i);
                gst1.setVendorID(json.getString(TAG_VendorID));
                gst1.setAddress(json.getString(TAG_ADDRESS));


            } catch (JSONException e) {
                e.printStackTrace();
            }
            listSuperHeroes.add(gst1);
        }

        //Finally initializing our adapter
        adapter = new CardAdapter17(listSuperHeroes, this);

        //Adding adapter to recyclerview
        recyclerView.setAdapter(adapter);

    }

    private void getData1(){
        //Showing a progress dialog
        final ProgressDialog loading = ProgressDialog.show(this,"Loading Data", "Please wait...",false,false);

        //Creating a json array request
        JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(DATA_URL1+vault,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        //Dismissing progress dialog
                        loading.dismiss();

                        //calling method to parse json array
                        parseData1(response);
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {

                    }
                });

        //Creating request queue
        RequestQueue requestQueue = Volley.newRequestQueue(this);

        //Adding request to the queue
        requestQueue.add(jsonArrayRequest);
    }

    //This method will parse json data
    private void parseData1(JSONArray array){
        for(int i = 0; i<array.length(); i++) {
            GstCustLoc gst1 = new GstCustLoc();
            JSONObject json = null;
            try {

                json = array.getJSONObject(i);
                gst1.setCustomer_ID(json.getString(TAG_CustomerID));
                gst1.setAddress(json.getString(TAG_ADDRESS));


            } catch (JSONException e) {
                e.printStackTrace();
            }
            listSuperHeroes1.add(gst1);
        }

        //Finally initializing our adapter
        adapter = new CardAdapter18(listSuperHeroes1, this);

        //Adding adapter to recyclerview
        recyclerView.setAdapter(adapter);
    }

}
8
sunil y 25 janv. 2017 à 08:04

4 réponses

Meilleure réponse

Vous devez effacer votre Array List avant de recevoir des données une deuxième fois.

Faites ceci dans la méthode parseData1 avant for loop.

listSuperHeroes.clear();

listSuperHeroes1.clear();
11
Jay Rathod RJ 25 janv. 2017 à 05:17

Ce que vous devez faire est de mettre à jour RecyclerView sur le bouton Cliquez, mettez la méthode ci-dessous dans votre adaptateur

public void updateData(ArrayList<ViewModel> viewModels) {
   items.clear();
   items.addAll(viewModels);
   notifyDataSetChanged();
}

Que d'appeler cette méthode avec de nouvelles données

ArrayList<ViewModel> viewModelsWithNewData = new ArrayList<ViewModel>();
adapter.updateData(viewModelsWithNewData );
1
sushant gosavi 25 janv. 2017 à 05:43

Utilisez ce code pour effacer les éléments RecycleView

public void clear() {
    int size = listSuperHeroes.size();
    listSuperHeroes.clear();
    notifyItemRangeRemoved(0, size);
}
8
Dasser Basyouni 25 janv. 2017 à 05:37

Vous n'avez pas besoin de définir l'adaptateur après avoir obtenu des données en ligne

//Finally initializing our adapter
    adapter = new CardAdapter18(listSuperHeroes1, this);

    //Adding adapter to recyclerview
    recyclerView.setAdapter(adapter);

Vous pouvez initialiser ou définir l'adaptateur dans la création et ajouter des données dans le 'listSuperHeroes1' et après l'analyse des données, vous pouvez faire adapter.notifyDataSetChanged(); cela changera les données de la liste.

Et la solution pour obtenir les données précédentes, vous devez supprimer toutes les données du listsuperHeroes1 cela vous aidera si vous rencontrez un problème, veuillez commenter.

0
laxmikant 25 janv. 2017 à 05:19