Tôi cần có một ViewPager (tương tự như một thư viện nằm ngang) bên trong RecyclerView hiển thị danh sách theo chiều dọc. Mỗi hàng của RecyclerView sẽ có một ViewPager mà sẽ cho phép để swipe giữa một số hình ảnh. ViewPager cũng sẽ hỗ trợ các sự kiện nhấp chuột sẽ được truyền đến RecyclerView gốc.ViewPager bên trong RecyclerView dưới dạng mục hàng
Hiện nay, tôi có thực hiện như sau:
Danh sách bộ chuyển đổi: chuyển đổi
@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);
...
}
Thư viện ảnh: mảnh
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;
}
}
Thư viện ảnh:
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);
}
}
}
Vấn đề tôi gặp phải là các phần của ViewPager không được tạo và hiển thị chính xác. Đôi khi chúng xuất hiện sau khi cuộn theo cách thủ công (nhưng không phải lúc nào), trong hầu hết các trường hợp chúng không xuất hiện chút nào.
Có ai có ý tưởng về những gì tôi đã thực hiện sai không?
Cảm ơn bạn.
Tôi đang gặp phải vấn đề tương tự: http://stackoverflow.com/questions/37801078/viewpager-inside-cardview-inside-recyclerview-android –
Tôi đã cố gắng giải quyết vấn đề này bằng cách sử dụng 'PagerAdapter' trực tiếp. Tôi sẽ đăng giải pháp của tôi sau vài phút. –