Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.
Start your free trialMatthew Lee
6,715 PointsViewpager is blank when I replace the fragment inside it...
Hi,
I am trying to replace a fragment which is held inside a ViewHolder. However, when I replace it, the new fragment shows a blank view despite having binded the new layout...
How can I properly display the layout for the new fragment??
Thanks!
1 Answer
Seth Kroger
56,413 PointsAre you using the ViewPager with a FragmentPagerAdapter to handle the fragments? It has methods for updating/removing/inserting pages and much like ListAdapters needs to be notified of changes.
Matthew Lee
6,715 PointsHi Seth,
Yes, I have a FragmentPagerAdapter and I am using a ViewPager to hold my fragment. My initial fragment is a RecylerView of images that uses an adapter. And in my adapter, I have an OnClickListener for the view. This is where I am replacing my fragment.
I've attached my code for the Adapter (where I make the transaction) as well as my FragmentPagerAdapter class.
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(view.getContext(), "You clicked on the " + item.getItemTitle() + " at Position -> " + item.getPosition() + "!", Toast.LENGTH_SHORT).show();
String name = item.getName();
String id = item.getId();
Log.e(TAG, "this is the name: " + name + " and iD -> " + id);
Bundle bundle = new Bundle();
bundle.putString("AIRPORT_CODE", id);
bundle.putString("AIRPORT_NAME",name);
//create the new VendorFragment -> set Fragment Manager -> Transaction -> replace -> commit
VendorFragment vendorFragment = new VendorFragment();
vendorFragment.setArguments(bundle);
FragmentManager fragmentManager = ((AppCompatActivity) view.getContext()).getFragmentManager();
fragmentManager.executePendingTransactions();
//Fragment currentFrag = fragmentManager.findFragmentById(c
//FragmentManager childFM = currentFrag.getChildFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.replace(R.id.container, vendorFragment);
fragmentTransaction.commit();
}
});
}
public class SectionsPageAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
public SectionsPageAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
}
Matthew Lee
6,715 PointsMatthew Lee
6,715 Points@Ben Deitch