Ich brauche einen ViewPager (ähnlich einer horizontalen Galerie) innerhalb einer RecyclerView, die eine Liste vertikal anzeigen. Jede Reihe der RecyclerView wird einen ViewPager haben, der es erlaubt zwischen einigen Bildern zu wischen. Der ViewPager unterstützt auch Klick-Ereignisse, die an den übergeordneten RecyclerView weitergegeben werden.ViewPager innerhalb RecyclerView als Zeilenobjekt
Derzeit habe ich die folgende Implementierung:
Liste Adapter:
@Override
public void onBindViewHolder(MyHolder holder, int position) {
super.onBindViewHolder(holder, position);
Item listItem = get(position);
...
GalleryAdapter adapter =
new GalleryAdapter(getActivity().getSupportFragmentManager(),
item.mediaGallery);
holder.imageGallery.setAdapter(adapter);
...
}
Galerie Adapter:
public class GalleryAdapter extends FragmentStatePagerAdapter {
private final List<Item.Gallery> mItems;
@Bind(R.id.gallery_item)
ImageView galleryView;
public SearchResultsGalleryPagerAdapter(FragmentManager fm, @NonNull ArrayList<Item.Gallery> mediaGallery) {
super(fm);
mItems = mediaGallery;
}
@Override
public Fragment getItem(int position) {
GalleryFragment fragment = GalleryFragment.newInstance(mItems.get(position));
...
return fragment;
}
@Override
public int getCount() {
return null == mItems ? 0 : mItems.size();
}
@Override
public int getItemPosition(Object object) {
//return super.getItemPosition(object);
return PagerAdapter.POSITION_NONE;
}
}
Galerie Fragment:
public class GalleryFragment extends Fragment {
private static final String GALLERY_ITEM_BUNDLE_KEY = "gallery_item_bundle_key";
@Bind(R.id.gallery_item)
ImageView mGalleryView;
private Item.Gallery mGalleryItem;
// Empty constructor, required as per Fragment docs
public GalleryFragment() {}
public static SearchResultsGalleryFragment newInstance(Item.Gallery galleryItem) {
GalleryFragment fragment = new GalleryFragment();
// Add the item in the bundle which will be set to the fragment
Bundle bundle = new Bundle();
bundle.putSerializable(GALLERY_ITEM_BUNDLE_KEY, galleryItem);
fragment.setArguments(bundle);
return fragment;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mGalleryItem = (Item.Gallery) getArguments().getSerializable(GALLERY_ITEM_BUNDLE_KEY);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_gallery_item, container, false);
ButterKnife.bind(this, view);
displayGalleryItem();
return view;
}
private void displayGalleryItem() {
if (null != mGalleryItem) {
Glide.with(getContext()) // Bind it with the context of the actual view used
.load(mGalleryItem.getImageUrl()) // Load the image
.centerCrop() // scale type
.placeholder(R.drawable.default_product_400_land) // temporary holder displayed while the image loads
.crossFade()
.into(mGalleryView);
}
}
}
Das Problem, das ich habe, ist, dass die Fragmente des ViewPager nicht korrekt erstellt und angezeigt werden. Manchmal erscheinen sie nach einem manuellen Scroll (aber nicht immer), in den meisten Fällen erscheinen sie überhaupt nicht.
Hat jemand eine Idee, was ich falsch implementiert habe?
Vielen Dank.
Ich bin mit dem gleichen Problem konfrontiert: http://StackOverflow.com/Questions/37801078/viewpager-inside-cardview-inside-recyclerview-android –
Ich habe es geschafft, um dieses Problem zu umgehen, indem Sie 'PagerAdapter' direkt verwenden. Ich werde meine Lösung in ein paar Minuten veröffentlichen. –