Android RecyclerView不会更新收藏夹状态

问题描述

从FavDetailActivity转到“收藏夹活动”时,我的“收藏夹活动”上的RecyclerView没有更新

当我打开图像而不喜欢它时,当我返回“收藏夹活动”时,它不会更新。仅当我切换到其他活动并返回时,它才会更新。

以下是互动的记录:https://drive.google.com/file/d/1SUAjY6fEHTmU-JKPyM4Bq6m5kE-CQCtv/view

这是我的FavDetailActivity ---


public class FavDetailActivity extends AppCompatActivity {

    private SectionsPagerAdapter mSectionsPagerAdapter;
    public ArrayList<FavItem> data1 = new ArrayList<>();
    int pos1;
    private ViewPager mViewPager;
    FavAdapter favAdapter;
    public static String image;
    public static String key_id1;
    public static String selectedImage1;
    public static String title;
    FavDB favDB;
    ImageView favButton;
    String favstatus;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        SharedPreferences prefs = this.getSharedPreferences("prefs",this.MODE_PRIVATE);
        boolean firstStart = prefs.getBoolean("firstStart",true);
        if (firstStart) {
            createTableOnFirstStart();
        }

        setContentView(R.layout.activity_fav_detail);

        favDB = new FavDB(this);
        favAdapter = new FavAdapter(this,data1);
        data1 = getIntent().getParcelableArrayListExtra("data1");
        pos1 = getIntent().getIntExtra("pos1",0);
        setTitle(data1.get(pos1).getItem_title());
        image = data1.get(pos1).getItem_image();
        title = data1.get(pos1).getItem_title();
        key_id1 = data1.get(pos1).getKey_id();
        favstatus = data1.get(pos1).getFavstatus();
        favButton = findViewById(R.id.favButton2);
        selectedImage1 = image;
        readCursorData(key_id1);

        mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager(),data1);
        mViewPager = (ViewPager) findViewById(R.id.container1);
        mViewPager.setPageTransformer(true,new DepthPageTransformer());
        mViewPager.setAdapter(mSectionsPagerAdapter);
        mViewPager.setCurrentItem(pos1);

        mViewPager.addOnPagechangelistener(new ViewPager.OnPagechangelistener() {
            @Override
            public void onPageScrolled(int position,float positionOffset,int positionOffsetPixels) {
            }
            @Override
            public void onPageSelected(int position) {
                setTitle(data1.get(position).getItem_title());
                image = data1.get(position).getItem_image();
                selectedImage1 = image;
                pos1 = position;
                key_id1 = data1.get(position).getKey_id();
                title = data1.get(position).getItem_title();
                favstatus = data1.get(position).getFavstatus();
                readCursorData(key_id1);
            }
            @Override
            public void onPageScrollStateChanged(int state) {
            }
        });

        favButton.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                DatabaseReference refLike = FirebaseDatabase.getInstance().getReference().child("likes");
                final DatabaseReference upVotesRefLike = refLike.child(key_id1);

                if (favstatus.equals("0")) {
                    favstatus = "1";
                    favDB.insertIntoTheDatabase(title,image,key_id1,favstatus);
                    favButton.setBackgroundResource(R.drawable.ic_favorite_red_24dp);
                    try {
                        data1.remove(pos1);
                        Favourites.recyclerView.getAdapter().notifyItemRemoved(pos1);
                        Favourites.recyclerView.getAdapter().notifyItemRangeChanged(pos1,data1.size());
                        mSectionsPagerAdapter.notifyDataSetChanged();
                    } catch (Exception e) {
                        e.printstacktrace();
                    }


                    upVotesRefLike.runTransaction(new Transaction.Handler() {
                        @NonNull
                        @Override
                        public Transaction.Result doTransaction(@NonNull final MutableData mutableData) {
                            try {
                                Integer currentValue = mutableData.getValue(Integer.class);
                                if (currentValue == null) {
                                    mutableData.setValue(1);
                                } else {
                                    mutableData.setValue(currentValue + 1);
                                    new Handler(Looper.getMainLooper()).post(new Runnable() {
                                        @Override
                                        public void run() {
                                        }
                                    });
                                }
                            } catch (Exception e) {
                                throw e;
                            }
                            return Transaction.success(mutableData);
                        }

                        @Override
                        public void onComplete(@Nullable DatabaseError databaseError,boolean b,@Nullable DataSnapshot dataSnapshot) {
                            System.out.println("Transaction completed");
                        }
                    });
                } else if (favstatus.equals("1")) {

                    favstatus = "0";
                    favDB.remove_fav(key_id1);
                    favButton.setBackgroundResource(R.drawable.ic_favorite_shadow_24dp);
                    favAdapter.notifyItemRemoved(pos1);
                    data1.remove(pos1);
                    favDB.remove_fav(key_id1);
                    Favourites.recyclerView.getAdapter().notifyDataSetChanged();
                    mSectionsPagerAdapter.notifyDataSetChanged();
                }
            }
        });
    }
}

这是我的收藏夹活动---


public class Favourites extends AppCompatActivity {

    public static RecyclerView recyclerView;
    private FavDB favDB;
    private ArrayList<FavItem> favItemList = new ArrayList<>();
    private FavAdapter favAdapter;

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

        favDB = new FavDB(this);
        favAdapter = new FavAdapter(this,favItemList);
        recyclerView = findViewById(R.id.favRecyclerView1);
        recyclerView.setLayoutManager(new GridLayoutManager(this,2));
        recyclerView.setAdapter(favAdapter);
        loadData();
}

    private void loadData() {

        favItemList.clear();
        favAdapter.notifyDataSetChanged();

        sqliteDatabase db = favDB.getReadableDatabase();
        Cursor cursor = favDB.select_all_favorite_list();
        try {
            while (cursor.movetoNext()) {

                String title = cursor.getString(cursor.getColumnIndex(FavDB.ITEM_TITLE));
                String id = cursor.getString(cursor.getColumnIndex(FavDB.KEY_ID));
                String image = (cursor.getString(cursor.getColumnIndex(FavDB.ITEM_IMAGE)));
                String favstatus = (cursor.getString(cursor.getColumnIndex(FavDB.FAVORITE_STATUS)));

                FavItem favItem = new FavItem(title,id,favstatus);

                favItemList.add(favItem);
                favAdapter.notifyDataSetChanged();
            }
        } finally {
            if (cursor != null && cursor.isClosed())
                cursor.close();
            db.close();
        }

        favAdapter.notifyDataSetChanged();

    }
}

这是我的收藏夹---

public class FavAdapter extends RecyclerView.Adapter<FavAdapter.ViewHolder> {

    private Context context;
    private ArrayList<FavItem> favItemList;
    private FavDB favDB;
    private DatabaseReference refLike;

    public FavAdapter(Context context,ArrayList<FavItem> favItemList) {
        this.context = context;
        this.favItemList = favItemList;
        notifyDataSetChanged();
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fav_item,parent,false);
        favDB = new FavDB(context);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder,final int position) {
        holder.favTextView.setText(favItemList.get(position).getItem_title());

        Glide.with(context).load(favItemList.get(position).getItem_image()).into(holder.favImageView);
        favItemList.get(position).setFavstatus("1");

        holder.favCardView.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent intent = new Intent(context,FavDetailActivity.class);
                intent.putParcelableArrayListExtra("data1",favItemList);
                intent.putExtra("pos1",position);
                context.startActivity(intent);

            }
        });
    }

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

    public class ViewHolder extends RecyclerView.ViewHolder {

        TextView favTextView;
        ImageView favBtn;
        ImageView favImageView;
        CardView favCardView;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            favTextView = itemView.findViewById(R.id.favTextView);
            favBtn = itemView.findViewById(R.id.favBtn);
            favImageView = itemView.findViewById(R.id.favImageView);
            favCardView = itemView.findViewById(R.id.favCardView);

            refLike = FirebaseDatabase.getInstance().getReference().child("likes");
            favBtn.setonClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    int position = getAdapterPosition();
                    final FavItem favItem = favItemList.get(position);
                    final DatabaseReference upVotesRefLike = refLike.child(favItemList.get(position).getKey_id());
                    favDB.remove_fav(favItem.getKey_id());
                    removeItem(position);

                    upVotesRefLike.runTransaction(new Transaction.Handler() {
                        @NonNull
                        @Override
                        public Transaction.Result doTransaction(@NonNull final MutableData mutableData) {
                            try {
                                Integer currentValue = mutableData.getValue(Integer.class);
                                if (currentValue == null) {
                                    mutableData.setValue(1);
                                } else {
                                    mutableData.setValue(currentValue - 1);
                                }
                            } catch (Exception e) {
                                throw e;
                            }
                            return Transaction.success(mutableData);
                        }

                        @Override
                        public void onComplete(@Nullable DatabaseError databaseError,@Nullable DataSnapshot dataSnapshot) {
                            System.out.println("Transaction completed");
                        }
                    });
                }
            });
        }
    }

    private void removeItem(int position) {
        favItemList.remove(position);
        notifyItemRemoved(position);
        notifyItemRangeChanged(position,favItemList.size());
    }

}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)