无法使用新列表更新Recyclerview适配器,新列表显示空白

问题描述 投票:0回答:2

我想在收藏夹活动中获取新的更新列表,但我没有在收藏夹列表中获取任何项目。列表从共享首选项获取值但未更新到回收站视图。

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;
        }







    }

主要信息

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);
    }

}

shared preference.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;
    }
}

F av偶rite.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>
java android android-recyclerview recycler-adapter notifydatasetchanged
2个回答
0
投票

你在setLayoutManager()缺少Favourite.java


0
投票

尝试调用NotifyDataSetChanged()而不是NotifyItemRemoved()NotifyItemAdded()。这些方法对我也不起作用。您只是不会获得添加和删除项目的动画,但您可以添加自己的动画来完成这项工作!

您应该使用房间数据库来存储列表并处理它们,因为它更容易并且很有意义。建议使用SharedPreferences来存储整数和布尔值等值,而不是整个列表。

© www.soinside.com 2019 - 2024. All rights reserved.