Я использую Swipe-совместимый ViewPager с вкладками. Количество вкладок зависит от данных сервера. Для этого я использовал только один фрагмент с RecyclerView для отображения JSON данных в recyclerView.
Теперь первая вкладка заполнена корректно, но все остальные вкладки также отображают пробелы, поскольку в их категориях меньше товаров. В настоящее время у меня есть 4 вкладки, но вкладки могут измениться в будущем. Первая вкладка категории имеет больше товаров по сравнению с другими. все остальные вкладки отображают пустое пространство для тех товаров, которых нет в списке товаров. Пожалуйста, помогите мне удалить этот пробел.
это мой фрагмент класса
public class MenuListFragment extends Fragment {
private List<Product> categoryWiseProductList;
private int position;
private RecyclerView menuListCategoryWiseView;
private RecyclerView.LayoutManager layoutManager;
private MenuListViewAdapter menuListViewAdapter;
public MenuListFragment(@NonNull List<Product> categoryWiseProductList, int position) {
this.categoryWiseProductList = categoryWiseProductList;
this.position = position;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null){
categoryWiseProductList = getArguments().getParcelableArrayList("productList");
position = getArguments().getInt("position");
}
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.menu_list,container,false);
menuListCategoryWiseView = view.findViewById(R.id.menu_list_category_wise_view);
menuListCategoryWiseView.setItemAnimator(new DefaultItemAnimator());
menuListCategoryWiseView.setNestedScrollingEnabled(false);
layoutManager = new LinearLayoutManager(getActivity());
menuListCategoryWiseView.setLayoutManager(layoutManager);
return view;
}
@Override
public void onResume() {
super.onResume();
Log.e("scroll length" , "recycler view length " + menuListCategoryWiseView.computeVerticalScrollRange());
menuListViewAdapter.notifyDataSetChanged();
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
menuListViewAdapter = new MenuListViewAdapter(categoryWiseProductList, requireActivity() );
menuListCategoryWiseView.setAdapter(menuListViewAdapter);
menuListViewAdapter.notifyDataSetChanged();
}
}
This is my pager adpter
public class MenuListAdapter extends FragmentStateAdapter {
private MenuList menuList;
private Context context;
public MenuListAdapter(@NonNull AppCompatActivity activity, @NonNull MenuList menuList ) {
super(activity);
this.menuList = menuList;
this.context = activity;
}
@NonNull
@Override
public Fragment createFragment(int position) {
return new MenuListFragment(menuList.getCattegoryWisedProductList().get(position),position);
}
@Override
public int getItemCount() {
return menuList.getCategoryList().size();
}
}
this is my recycler view adapter
public class MenuListViewAdapter extends RecyclerView.Adapter<MenuListViewHolder> {
private Context mContext;
private List<Product> productList;
private static final String BASE_URL = "192.168.43.173";
private static final String SCHEME = "http";
private static final String PATH1 = "images";
private static final String PATH2 = "categories-image";
public MenuListViewAdapter(@NonNull List<Product> categoryWisedProductList, @NonNull Context context){
this.mContext = context;
this.productList = categoryWisedProductList;
}
@NonNull
@Override
public MenuListViewHolder onCreateViewHolder( @NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.product_layout, parent, false);
return new MenuListViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MenuListViewHolder holder, int position) {
holder.productName.setText(productList.get(position).getTitle());
Uri.Builder builder = new Uri.Builder();
builder.scheme(SCHEME).authority(BASE_URL).appendPath(PATH1).appendPath(PATH2).appendPath(productList.get(position).getImage());
Glide.with(mContext)
.load(builder.build().toString())
.placeholder(R.drawable.image_placeholder)
.override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
.into(holder.productImage);
String price = "MRP: ₹" + productList.get(position).getPrice();
holder.productPrice.setText(price);
String weight = "Gross Wt." + productList.get(position).getQuantity() + " " + productList.get(position).getUnit();
holder.productWeight.setText(weight);
if ( productList.get(position).isStock() == 0 ){
holder.productOutOfStock.setVisibility(View.VISIBLE);
holder.productReduceButton.hide();
holder.productAddButton.hide();
holder.productReduceView.setVisibility(View.GONE);
}else {
holder.productOutOfStock.setVisibility(View.GONE);
}
}
@Override
public int getItemCount() {
return productList.size();
}
}
это моя деятельность
public class MenuActivity extends AppCompatActivity {
private TabLayout menuListTabs;
private ViewPager2 menuListPager;
private MenuListAdapter menuListAdapter;
private MenuViewModel menuViewModel;
private AppCompatActivity activity;
private static String BASE_URL = "http://192.168.43.173/images/categories-thumb/";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
activity = this;
MaterialToolbar mToolbar = findViewById(R.id.mMenuToolbar);
setSupportActionBar(mToolbar);
menuListTabs = findViewById(R.id.menu_list_tabs);
menuListPager = findViewById(R.id.menu_view_pager);
menuListPager.setOffscreenPageLimit(1);
menuViewModel = new ViewModelProvider(this).get(MenuViewModel.class);
menuViewModel.getmMenuListLiveData().observe(this, menuList -> {
addTabs(menuListTabs,menuList.getCategoryList());
menuListAdapter = new MenuListAdapter(activity, menuList);
menuListPager.setAdapter(menuListAdapter);
menuListPager.registerOnPageChangeCallback(pageChangeCallback);
});
}
ViewPager2.OnPageChangeCallback pageChangeCallback = new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels);
Log.e("page scroller","coordinate position " + position + " positionOffset= " + positionOffset +", positionOffsetPixels= " + positionOffsetPixels);
}
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
}
@Override
public void onPageScrollStateChanged(int state) {
super.onPageScrollStateChanged(state);
}
};
@SuppressLint("InflateParams")
private void addTabs(@NonNull TabLayout tabLayout, @NonNull List<Category> list){
for (int i =0; i < list.size(); i++){
String tabName = list.get(i).getName();
View tabView = activity.getLayoutInflater().inflate(R.layout.menu_list_tab_view,null);
MaterialTextView textView = tabView.findViewById(R.id.menu_list_tabs_text_view);
ImageView imageView = tabView.findViewById(R.id.menu_list_tabs_icon_view);
String url = BASE_URL + list.get(i).getThumbnail().split("\\.")[0] + "-64.png";
textView.setText(tabName);
textView.setAllCaps(true);
Glide.with(activity)
.load(url)
.override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
.into(imageView);
tabLayout.addTab( menuListTabs.newTab().setCustomView(tabView));
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater appBarInflator = getMenuInflater();
appBarInflator.inflate(R.menu.app_bar_menu,menu);
return true;
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
return super.onOptionsItemSelected(item);
}
}
как на этом лоте изображения пробела также отображается в списке