anshul sinha
anshul sinha

Reputation: 31

Can't Update Recyclerview adapter with new list,new list showing blank

I want to get new updated list in Favourite activity,but instead i'm getting no items in favourite list.List getting values from sharedpreference but not updating to recycler view.

DiseaseAdapter

import android.content.Context;
    import android.content.Intent;
    import android.database.Cursor;
    import android.os.Build;
    import android.support.annotation.RequiresApi;
    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 android.widget.Toast;

    import java.util.ArrayList;
    import java.util.List;

    /**
     * Created by admin on 12/4/2017.
     */

    public class DiseaseAdapter extends RecyclerView.Adapter<DiseaseAdapter.DiseaseAdapterViewHolder> {
        List <String> data;
        Context ctx;



        SharedPreference sharedPreference;

        DiseaseAdapter(List <String> data, Context ctx){
            this.data=data;
            notifyDataSetChanged();
            this.ctx=ctx;
            sharedPreference = new SharedPreference();


        }



        @Override
        public DiseaseAdapterViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            LayoutInflater inflater=LayoutInflater.from(parent.getContext());
            View view= inflater.inflate(R.layout.activity_listview,parent,false);

            return new DiseaseAdapterViewHolder(view);
        }

        @Override
        public void onBindViewHolder(DiseaseAdapterViewHolder holder, int position) {
            final String title=data.get(position);
            holder.textView1.setText(title);

            if (checkFavoriteItem(title)) {

                holder.imageButton.setImageResource(R.drawable.star_colour);
                holder.imageButton.setTag("red");
            } else {

                holder.imageButton.setImageResource(R.drawable.ic_action_name);
                holder.imageButton.setTag("grey");
            }

        }


        @Override
        public int getItemCount() {
            return data.size();
        }


        class  DiseaseAdapterViewHolder extends RecyclerView.ViewHolder {

            TextView textView1;
            ImageView imageButton;

            public  DiseaseAdapterViewHolder(View itemView) {
                super(itemView);

                textView1=(TextView) itemView.findViewById(R.id.textView);
                imageButton=(ImageView)itemView.findViewById(R.id.imgbtn_favorite);


            }
        }

        /*Checks whether a particular product exists in SharedPreferences*/
        public boolean checkFavoriteItem(String checkProduct) {
            boolean check = false;
            List<String> favorites = sharedPreference.getFavorites(ctx);
            if (favorites != null) {
                for (String product : favorites) {
                    if (product.equals(checkProduct)) {
                        check = true;
                        break;
                    }
                }
            }
            return check;
        }







    }

MainActivity

import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.Toast;

import java.util.Arrays;
import java.util.List;

public class MainActivity extends AppCompatActivity{
    RecyclerView simpleListView;
    static Context ctx;
    String diseaseList[];

    SharedPreference sharedPreference;

    DiseaseAdapter da;
    List<String> newDiseaseList;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ctx=this;

        sharedPreference = new SharedPreference();

        diseaseList= new String[]{"Abscess",
                "Allergies",
                "Amnesia",
                "Anemia",
                "Andropause",
                "Angina",
                "Weight Loss"};


        Arrays.sort(diseaseList);





        newDiseaseList = Arrays.asList(diseaseList);

        simpleListView= (RecyclerView)findViewById(R.id.simpleListView);
        LinearLayoutManager lm=new LinearLayoutManager(MainActivity.this);
        simpleListView.setLayoutManager(lm);
       /* DividerItemDecoration di=new DividerItemDecoration(MainActivity.this,lm.getOrientation());
        simpleListView.addItemDecoration(di);*/

        da=new DiseaseAdapter(newDiseaseList,ctx);
        simpleListView.setAdapter(da);
        simpleListView.setHasFixedSize(true);


        simpleListView.addOnItemTouchListener(
                new RecyclerItemClickListener(ctx, simpleListView ,new RecyclerItemClickListener.OnItemClickListener() {
                    @Override public void onItemClick(View view, int position) {

                        ImageView button = (ImageView) view.findViewById(R.id.imgbtn_favorite);

                        String tag = button.getTag().toString();
                        if (tag.equalsIgnoreCase("grey")) {
                            sharedPreference.addFavorite(ctx, newDiseaseList.get(position));
                            Toast.makeText(ctx,
                                    "add to favourites",
                                    Toast.LENGTH_SHORT).show();

                            button.setTag("red");
                            button.setImageResource(R.drawable.star_colour);
                        } else {
                            sharedPreference.removeFavorite(ctx, newDiseaseList.get(position));
                            button.setTag("grey");
                            button.setImageResource(R.drawable.ic_action_name);
                            Toast.makeText(ctx,
                                    "removed from favourites",
                                    Toast.LENGTH_SHORT).show();
                        }


                    }

                    @Override public void onLongItemClick(View view, int position) {

                    }
                })
        );

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_favorites:
                Intent i=new Intent(this,Favourite.class);
           this.startActivity(i);

                return true;
        }
        return super.onOptionsItemSelected(item);
    }

}

SharedPreference.java

import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;

import com.google.gson.Gson;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


public class SharedPreference {

    public static final String PREFS_NAME = "PRODUCT_APP";
    public static final String FAVORITES = "Product_Favorite";

    public SharedPreference() {
        super();
    }

    // This four methods are used for maintaining favorites.
    public void saveFavorites(Context context, List<String> favorites) {
        SharedPreferences settings;
        Editor editor;

        settings = context.getSharedPreferences(PREFS_NAME,
                Context.MODE_PRIVATE);
        editor = settings.edit();

        Gson gson = new Gson();
        String jsonFavorites = gson.toJson(favorites);

        editor.putString(FAVORITES, jsonFavorites);

        editor.commit();
    }

    public void addFavorite(Context context, String product) {
        List<String> favorites = getFavorites(context);
        if (favorites == null)
            favorites = new ArrayList<String>();
        favorites.add(product);
        saveFavorites(context, favorites);
    }

    public void removeFavorite(Context context, String product) {
        List<String> favorites = getFavorites(context);
        if (favorites != null) {
            favorites.remove(product);
            saveFavorites(context, favorites);
        }
    }

    public ArrayList<String> getFavorites(Context context) {
        SharedPreferences settings;
        List<String> favorites ;

        settings = context.getSharedPreferences(PREFS_NAME,
                Context.MODE_PRIVATE);

        if (settings.contains(FAVORITES)) {
            String jsonFavorites = settings.getString(FAVORITES, null);
            Gson gson = new Gson();
            String [] favoriteItems = (gson.fromJson(jsonFavorites,String [].class));

            favorites = Arrays.asList(favoriteItems);
            favorites = new ArrayList<String>(favorites);
        } else
            return null;

        return (ArrayList<String>) favorites;
    }
}

Favourite.java

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;

import java.util.List;

public class Favourite extends AppCompatActivity {
    RecyclerView favoriteList;
    SharedPreference sharedPreference;
    List<String> favorites;
    DiseaseAdapter diseaseAdapter;

    Context ctx;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_favourite);
        ctx=this;
        sharedPreference = new SharedPreference();
        favorites = sharedPreference.getFavorites(ctx);
        favoriteList = (RecyclerView)findViewById(R.id.favListView);


        if (favorites == null) {
            showAlert(getResources().getString(R.string.no_favorites_items),
                    getResources().getString(R.string.no_favorites_msg));
        } else {

            if (favorites.size() == 0) {
                showAlert(
                        getResources().getString(R.string.no_favorites_items),
                        getResources().getString(R.string.no_favorites_msg));
            }


            if (favorites != null) {

                diseaseAdapter = new DiseaseAdapter(favorites,ctx);

                diseaseAdapter.notifyDataSetChanged();
                favoriteList.setAdapter(diseaseAdapter);
                favoriteList.invalidate();

                favoriteList.addOnItemTouchListener(
                        new RecyclerItemClickListener(ctx, favoriteList ,new RecyclerItemClickListener.OnItemClickListener() {
                            @Override public void onItemClick(View view, int position) {

                                ImageView button = (ImageView) view
                                        .findViewById(R.id.imgbtn_favorite);

                                String tag = button.getTag().toString();
                                if (tag.equalsIgnoreCase("grey")) {
                                    sharedPreference.addFavorite(ctx,
                                            favorites.get(position));
                                    Toast.makeText(
                                            ctx,
                                            ctx.getResources().getString(
                                                    R.string.add_favr),
                                            Toast.LENGTH_SHORT).show();

                                    button.setTag("red");
                                    button.setImageResource(R.drawable.star_colour);
                                } else {
                                    sharedPreference.removeFavorite(ctx,
                                            favorites.get(position));
                                    button.setTag("grey");
                                    button.setImageResource(R.drawable.ic_action_name);
                                 /*   diseaseAdapter.remove(favorites
                                            .get(position));*/
                                    diseaseAdapter.notifyItemRemoved(position);
                                    Toast.makeText(
                                            ctx,
                                            ctx.getResources().getString(
                                                    R.string.remove_favr),
                                            Toast.LENGTH_SHORT).show();
                                }



                            }

                            @Override public void onLongItemClick(View view, int position) {

                            }
                        })
                );



            }
        }

    }

    public void showAlert(String title, String message) {
        if (ctx != null) {
            AlertDialog alertDialog = new AlertDialog.Builder(ctx)
                    .create();
            alertDialog.setTitle(title);
            alertDialog.setMessage(message);
            alertDialog.setCancelable(false);

            // setting OK Button
            alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "OK",
                    new DialogInterface.OnClickListener() {

                        public void onClick(DialogInterface dialog, int which) {
                            dialog.dismiss();
                            // activity.finish();
                            getFragmentManager().popBackStackImmediate();
                        }
                    });
            alertDialog.show();
        }
    }

}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.admin.fav.MainActivity">


<android.support.v7.widget.RecyclerView
    xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/simpleListView"
    >
</android.support.v7.widget.RecyclerView>





</RelativeLayout>

activity_listview.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="wrap_content"
    android:orientation="horizontal">



    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:textSize="20dp"
        android:paddingTop="10dp"
        android:paddingBottom="10dp"
        android:paddingLeft="10dp"
        android:textColor="#434b3e"
        android:text=""/>

    <ImageView
        android:id="@+id/imgbtn_favorite"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_marginRight="3dp"
        android:background="@null"
        />

</RelativeLayout>

activity_favourite.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.admin.fav.Favourite">

    <android.support.v7.widget.RecyclerView
        xmlns:android="http://schemas.android.com/apk/res/android"

        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/favListView"
        >
    </android.support.v7.widget.RecyclerView>


</RelativeLayout>

Upvotes: 0

Views: 567

Answers (2)

Bertram Gilfoyle
Bertram Gilfoyle

Reputation: 10235

You are missing setLayoutManager() in Favourite.java.

Upvotes: 1

user8619168
user8619168

Reputation:

Try calling NotifyDataSetChanged() instead of NotifyItemRemoved() or NotifyItemAdded(). These methods did not work for me either. You just won't get the animations of items being added and removed but you can add your own animations to do the trick!

You should use Room Database to store lists and handle them as it is much easier and makes a lot of sense. SharedPreferences is recommended for storing values such as integers and booleans, not whole lists.

Upvotes: 0

Related Questions