Reputation: 1
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
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