Tanmay Salunke
Tanmay Salunke

Reputation: 1

Can't see Data in Favourite fragnment from Home Fragnment

After clicking on the heart button the card should get saved in the Favourite fragment I am using Room Db to save the card i had made dao class and database class too I had made an insert query on the heart button too

package com.trycatch_tanmay.code;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.trycatch_tanmay.ModelHome;

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

public class FavouriteFragment extends Fragment implements FavouriteAdapter.OnFavoriteItemClickListener {
    private RecyclerView favoRv;
    private FavouriteAdapter favouriteAdapter;
    private List<ModelHome> favouriteList;
    private FavouriteDao favouriteDao;
    private FavouriteDatabase favouriteDatabase;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_favourite, container, false);
        favoRv = view.findViewById(R.id.favoRv);
        favouriteList = new ArrayList<>();
        favouriteAdapter = new FavouriteAdapter(requireContext(), favouriteList);
        favoRv.setLayoutManager(new GridLayoutManager(requireContext(), 2));
        favoRv.setAdapter(favouriteAdapter);

        // Initialize the FavouriteDatabase instance
        favouriteDatabase = FavouriteDatabase.getInstance(requireContext());
        // Initialize the FavouriteDao instance
        favouriteDao = favouriteDatabase.getfavouriteDao();

        fetchData();
        return view;
    }

    private void fetchData() {
        favouriteList.clear(); // Clear previous data before fetching new data
        // Fetch data from the database
        List<ModelHome> userList = favouriteDao.getAllUsers();
        for (ModelHome modelHome : userList) {
            favouriteList.add(modelHome); // Add each retrieved item to the favouriteList
        }
        favouriteAdapter.notifyDataSetChanged(); // Notify adapter of data change
    }

    @Override
    public void onResume() {
        super.onResume();
        fetchData(); // Refresh data when fragment resumes
    }

    @Override
    public void onFavoriteItemClick(int position) {
        // Handle item click in favourites here
        ModelHome clickedItem = favouriteList.get(position);
        // Implement your logic
    }
} this is my favourite fragnment 
package com.trycatch_tanmay.code;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.trycatch_tanmay.HomeAdapter;
import com.trycatch_tanmay.ModelHome;

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

public class HomeFragment extends Fragment implements HomeAdapter.OnFavoriteItemClickListener {

    private RecyclerView recyclerView;
    private HomeAdapter homeAdapter;
    private List<ModelHome> modelHomeList = new ArrayList<>();
    private UserDao userDao;
    private FavouriteDatabase favouriteDatabase;
    private FavouriteDao favouriteDao; // Correct initialization
    FavouriteAdapter favouriteAdapter;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_home, container, false);
        recyclerView = view.findViewById(R.id.recyclerView);
        homeAdapter = new HomeAdapter(requireContext(), modelHomeList,favouriteDao);
        recyclerView.setLayoutManager(new GridLayoutManager(requireContext(), 2));
        recyclerView.setAdapter(homeAdapter);

        // Initialize the FavouriteDatabase instance
        favouriteDatabase = FavouriteDatabase.getInstance(requireContext());
// Initialize the FavouriteDao instance
        favouriteDao = favouriteDatabase.getfavouriteDao(); // Proper initialization
        Userdatabase userDatabase = Userdatabase.getINSTANCE(requireContext());
        userDao = userDatabase.getmodel();

        fetchData();

        // Set the click listener for the HomeAdapter
        homeAdapter.setOnFavoriteItemClickListener(new HomeAdapter.OnFavoriteItemClickListener() {
            @Override
            public void onFavoriteItemClick(int position, ModelHome modelHome) {
                handleFavoriteItemClick(position, modelHome);
            }
        });

        return view;
    }

    private void fetchData() {
        homeAdapter.clearData();
        List<ModelHome> userList = userDao.getAllUsers();
        for (ModelHome modelHome : userList) {
            homeAdapter.addUser(modelHome);
        }
    }

    @Override
    public void onResume() {
        super.onResume();
        fetchData();
    }

    @Override
    public void onFavoriteItemClick(int position, ModelHome modelHome) {
//        handleFavoriteItemClick(position, modelHome);
        // Handle item click in favourites here
        ModelHome clickedItem = modelHomeList.get(position);
        // Implement your logic

        // Call the Insert method to save the clickedItem to the database
        favouriteDao.Insert(clickedItem);

        // Notify the adapter of data change in the FavouriteFragment
        favouriteAdapter.addUser(clickedItem);
    }

    private void handleFavoriteItemClick(int position, ModelHome clickedItem) {
//// ADpter click listern insert query on heart button and  favourtite dao inziale favourite get all
        // Get an instance of FavouriteDao
        FavouriteDao favouriteDao = favouriteDatabase.getfavouriteDao();

        // Call the Insert method to save the clickedItem to the database
        favouriteDao.Insert(clickedItem);

        // Replace the fragment with the FavouriteFragment and pass the clicked item
        Fragment favouriteFragment = new FavouriteFragment();
        Bundle bundle = new Bundle();
        bundle.putParcelable("clickedItem", clickedItem);
        favouriteFragment.setArguments(bundle);

        FragmentTransaction transaction = getParentFragmentManager().beginTransaction();
        transaction.replace(R.id.favourite_container, favouriteFragment);
        transaction.addToBackStack(null);
        transaction.commit();
    }
}
this is my HomeFragnment package com.trycatch_tanmay;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.bumptech.glide.Glide;
import com.trycatch_tanmay.code.FavouriteDao;
import com.trycatch_tanmay.code.R;

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

public class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.ViewHolder> {
    private Context context;
    private List<ModelHome> modelHomes;
    private FavouriteDao favouriteDao; // Add FavouriteDao field
    private OnFavoriteItemClickListener listener; // Corrected variable name

    public interface OnFavoriteItemClickListener {
        void onFavoriteItemClick(int position,ModelHome modelHome);
    }



    public HomeAdapter(Context context, List<ModelHome> modelHomes, FavouriteDao favouriteDao) {
        this.context = context;
        this.modelHomes = new ArrayList<>(modelHomes);
        this.favouriteDao = favouriteDao;
    }


    public void addUser(ModelHome modelHome) {
        modelHomes.add(modelHome);
        notifyDataSetChanged();
    }

    public void clearData() {
        modelHomes.clear();
        notifyDataSetChanged();
    }

    public void setModelHomes(List<ModelHome> modelHomes) {
        this.modelHomes = new ArrayList<>(modelHomes);
        notifyDataSetChanged();
    }
    public void setImageData(List<ModelHome> modelHomes) {
        this.modelHomes = new ArrayList<>(modelHomes);
        notifyDataSetChanged();
    }
    // Correcting the listener implementation
    public void setOnFavoriteItemClickListener(OnFavoriteItemClickListener listener) {
        this.listener = listener;
    }

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

    @Override
    public void onBindViewHolder(@NonNull HomeAdapter.ViewHolder holder, int position) {
        final ModelHome modelHome = modelHomes.get(position); // Declare as final here
        if (modelHomes.get(position).getName() != null && modelHomes.get(position).getContact() != null &&
                modelHomes.get(position).getAddress() != null && modelHomes.get(position).getPosition() != null) {
            if (modelHome.getImagePath() != null) {
                // Use Glide or Picasso to load image into the ImageView
                Glide.with(context).load(modelHome.getImagePath()).into(holder.image_1);
            }
            // Set data to views
            holder.textView1.setText("Names:" + modelHomes.get(position).getName());
            holder.textView2.setText(("Position:" + modelHome.getPosition()));
            holder.textView3.setText("Company Name:" + modelHome.getAddress());
            holder.favoriteOpt.setOnClickListener(v -> {
                // Handle favourite option click
                if (favouriteDao != null) {
                    favouriteDao.Insert(modelHome); // Insert the clicked item into the database
                }
            });
        }
    }

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

    public class ViewHolder extends RecyclerView.ViewHolder {
        ImageView image_1, image_menu, editOpt, favoriteOpt, shareOpt;
        TextView textView1, textView2, textView3;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            image_1 = itemView.findViewById(R.id.image_1);
            image_menu = itemView.findViewById(R.id.image_menu);
            editOpt = itemView.findViewById(R.id.editOpt);
            favoriteOpt = itemView.findViewById(R.id.favoriteOpt);
            shareOpt = itemView.findViewById(R.id.shareOpt);
            textView1 = itemView.findViewById(R.id.textView1);
            textView2 = itemView.findViewById(R.id.textView2);
            textView3 = itemView.findViewById(R.id.textView3);

//            Set on clickOnclickListener for favouriteOpt
            favoriteOpt.setOnClickListener(v -> {
                int adapterPosition = getAdapterPosition();
                if (adapterPosition != RecyclerView.NO_POSITION) {
                    if (listener != null) {
                        listener.onFavoriteItemClick(adapterPosition, modelHomes.get(adapterPosition));
                    }
                }
            });
        }
    }
}
this is my Home adapter and perfroming on click in and called that interface in Homefragnment

I had put insert query on heart button and get all method is use in favorite fragment then why it is not happeinng

Upvotes: 0

Views: 21

Answers (1)

waseem akram
waseem akram

Reputation: 101

ok did u check that the DB is creating table or not in app inspection

here see its look like if data is going in and showing its mean gettting data problem in favorite fragment first check this then i will help u in next method

Upvotes: 0

Related Questions