Android с использованием Fragment с RecyclerView с отображением пробелов - PullRequest
0 голосов
/ 29 апреля 2020

Я использую 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);
    }
}

как на этом лоте изображения пробела также отображается в списке

...