1.TabLayout
- tab1 (Fragment1)
- tab2 (Fragment2)
- tab3 (Fragment3)
* RecyclerView + CardView (OnClick)
On CardView
ClickListner open another fragment in tab3. So how to open fragment in tab3.
Error is in getFragmentManager()
:
FragmentTransaction transaction = getFragmentManager().beginTransaction();
Instead of this, I tried:
FragmentTransaction transaction = activity.getFragmentManager().beginTransaction();
FragmentTransaction transaction = itemview.getContext().getFragmentManager().beginTransaction();
But error is not resolve.
Here is my code:
public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder> {
List<NatureItem> mItems;
private int lastPosition = -1;
Context context;
TaskFragment main;
public CardAdapter(Context context,TaskFragment ma)
{
this.context=context;
main=ma;
}
public CardAdapter() {
super();
mItems = new ArrayList<NatureItem>();
NatureItem nature = new NatureItem();
nature.setName("The Paris Attack 2015");
nature.setDes("Lorem ipsum dolor sit amet.");
nature.setThumbnail(R.drawable.news1);
mItems.add(nature);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int position) {
View v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.custom_list, viewGroup, false);
ViewHolder viewHolder = new ViewHolder(v);
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
NatureItem nature = mItems.get(i);
viewHolder.tvNature.setText(nature.getName());
viewHolder.tvDesNature.setText(nature.getDes());
viewHolder.imgThumbnail.setImageResource(nature.getThumbnail());
// setAnimation(viewHolder.card,i);
}
@Override
public int getItemCount() {
return mItems.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
private int lastPosition = -1;
public ImageView imgThumbnail;
public TextView tvNature;
public TextView tvDesNature;
// Button btnclear,btncancle;
CardView card;
Activity activity;
Context co;
public ViewHolder(final View itemView) {
super(itemView);
imgThumbnail = (ImageView) itemView.findViewById(R.id.img_thumbnail);
tvNature = (TextView) itemView.findViewById(R.id.tv_nature);
tvDesNature = (TextView) itemView.findViewById(R.id.tv_des_nature);
card = (CardView) itemView.findViewById(R.id.card);
card.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(itemView.getContext(), "Clicked Card...", Toast.LENGTH_LONG).show();
ShareFragment newFragment = new ShareFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.viewFragments, newFragment);
transaction.addToBackStack(null);
transaction.commit();
}
});
}
}
}
If you have used support library fragments or default fragments, be sure to use same of it every every where. And use "getSupportFragmentManager" or "getFragmentManager" carefully.
Pass context inside constructor.
Inside onClick
Update
Open new fragment as follows in your onclick
Problem :
Solution :
When you use
adapter
context then for access fragment manager you need to cast yourcontext
. So you should use this way.Now you can access method for fragment manager like ,
But keep in your mind that your
Fragment
should be imported as aandroid.support.app.v4.Fragment
otherwise there might be a casting problem.If you open fragment for particular one tab then you should use
getChildSupportFragmentManager()
instead ofgetSupportFragmentManager()
Note : If you want to call
fragment
fromadapter
class then you should makeinterface
and pass listener to your button click method and implement your activity with that interface.Update :
Also you can pass
FragmentManager
to your adapter constructor. Like,And after that you can use
this.f_manager
in your adapter classgetView()
method.Try this sniped :