Android Value Passing Adapter To Fragment
I am developing an app for displaying images and text. When clicking on the item it goes to another fragment. The listing showing is correct but when I click on the item it does no
Solution 1:
From Adapter you send data with intent as:
Fragmentfragment=newtasks();
FragmentManagerfragmentManager= context.getSupportFragmentManager(); // this is basically context of the classFragmentTransactionfragmentTransaction= fragmentManager.beginTransaction();
Bundle bundle=newBundle();
bundle.putString("name", "From Adapter"); //key and value//set Fragmentclass Arguments
fragment.setArguments(bundle);
fragmentTransaction.replace(R.id.content_frame, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
and in Fragment onCreateView method:
@OverridepublicViewonCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
String strtext=getArguments().getString("name"); //fetching value by key return inflater.inflate(R.layout.fragment, container, false);
}
Solution 2:
In your onClickListener();
Fragmentfragment=newtasks();
FragmentManagerfragmentManager= getActivity().getSupportFragmentManager();
FragmentTransactionfragmentTransaction= fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.content_frame, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
Change R.id.content_frame
with your fragment
Solution 3:
You have made one mistake in your onClick
method.
When you want to go one fragment to other fragment, you have to transaction the fragment using FragmentTransaction.class Check out below code.
Edit :
SecondFragmentfragment=newSecondFragment();
FragmentManagerfragmentManager= currentfragment.getFragmentManager();
FragmentTransactionfragmentTransaction= fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.content_frame, fragment);
fragmentTransaction.hide(currentfragment) fragmentTransaction.addToBackStack(currentfragment.getclass().getsimplename());
fragmentTransaction.commit();
Edit :
Just put below code in your RecyclerViewAdapter method onBindViewHolder.
holder.cardView.setOnClickListener(newView.OnClickListener() {
@OverridepublicvoidonClick(View v) {
//Toast.makeText(context, "Clicked", Toast.LENGTH_SHORT).show();// I want to send values to SubCategoryFragment and start SubCategoryFragmentBundleargs=newBundle();
args.putString("category_id", categoryId);
//set Fragmentclass ArgumentsSubCategoryFragmentfragobj=newSubCategoryFragment();
fragobj.setArguments(args);
FragmentManagerfragmentManager= currentfragment.getFragmentManager();
FragmentTransactionfragmentTransaction= fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.content_frame, fragobj);
fragmentTransaction.hide(currentfragment);
fragmentTransaction.addToBackStack(currentfragment.getclass().getsimplename());
fragmentTransaction.commit();
//newInstance(categoryId);
}
});
EDIT :
publicclassMyRecyclerAdapterextendsRecyclerView.Adapter<MyRecyclerAdapter.MyViewHolder> {
String categoryId;
private List<NewsFeeds> feedsList;
private Context context;
private LayoutInflater inflater;
private Fragment currentFragment;
publicMyRecyclerAdapter(Context context, List<NewsFeeds> feedsList, final Fragment currentFragment) {
this.context = context;
this.feedsList = feedsList;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.currentFragment = currentFragment;
}
@Overridepublic MyRecyclerAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
ViewrootView= inflater.inflate(R.layout.singleitem_recyclerview_categories, parent, false);
returnnewMyViewHolder(rootView);
}
@OverridepublicvoidonBindViewHolder(MyViewHolder holder, int position) {
NewsFeedsfeeds= feedsList.get(position);
//Pass the values of feeds object to Views
holder.title.setText(feeds.getName());
//holder.categoryId.setText(feeds.getCategory_id());
holder.title.setOnClickListener(newView.OnClickListener() {
@OverridepublicvoidonClick(View v) {
//Toast.makeText(context, "Clicked", Toast.LENGTH_SHORT).show();// I want to send values to SubCategoryFragment and start SubCategoryFragmentBundleargs=newBundle();
args.putString("category_id", categoryId);
//set Fragmentclass ArgumentsSubCategoryFragmentfragobj=newSubCategoryFragment();
fragobj.setArguments(args);
FragmentManagerfragmentManager= currentfragment.getFragmentManager();
FragmentTransactionfragmentTransaction= fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.content_frame, fragobj);
fragmentTransaction.hide(currentfragment);
fragmentTransaction.addToBackStack(currentfragment.getclass().getsimplename());
fragmentTransaction.commit();
//newInstance(categoryId);
}
});
}
@OverridepublicintgetItemCount() {
return feedsList.size();
}
publicclassMyViewHolderextendsRecyclerView.ViewHolder {
private TextView title;
publicMyViewHolder(View itemView) {
super(itemView);
title = (TextView) itemView.findViewById(R.id.title_view);
}
}
}
Solution 4:
Replace your onclick listener with this.
cardView.setOnClickListener(newView.OnClickListener() {
@OverridepublicvoidonClick(View v) {
//Toast.makeText(context, "Clicked", Toast.LENGTH_SHORT).show();// I want to send values to SubCategoryFragment and start SubCategoryFragmentBundleargs=newBundle();
args.putString("category_id", categoryId);
//set Fragmentclass ArgumentsSubCategoryFragmentfragobj=newSubCategoryFragment();
fragobj.setArguments(args);
Log.d("LOGTAG", categoryId);
Log.d("LOGTAG", "clicked");
//put this in your codeFragmentManagerfragmentManager= getActivity().getSupportFragmentManager();
FragmentTransactionfragmentTransaction= fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.SubCategoryFragment, fragobj);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
//newInstance(categoryId);
}
});
Post a Comment for "Android Value Passing Adapter To Fragment"