прочитайте информацию ясно

  1. Я извлекаю номер конечной категории из JSON с помощью MVVM и Retrofit и создаю Dynamic Tab Layout.
  2. Я использую Single Fragment (ProductListFragment) для обновления пользовательского интерфейса в соответствии с TabLayout.
  3. Таким образом, при выполнении Activity номер Tab и экрана создаются в соответствии с данными JSON.
  4. Проблема в том, что на первом экране ничего не отображается, когда я перехожу на второй, чтобы показать данные хорошо, Когда я перехожу на третий, он также показывает правильные данные. Когда я снова перехожу на первый экран, то на первом экране отображаются данные. Почему?
  5. Если я получу две динамические вкладки, на первом экране ничего не отобразится, на втором будут показаны правильные данные, когда я вернусь на первый экран, а затем снова на первом экране ничего.
  6. Итак, если количество вкладок больше 2 и я возвращаюсь к первому экрану после следующих вкладок, чем первое обновление экрана.

Пожалуйста, ответьте мне как можно скорее.

Деятельность

endCategoriesListGlobal = endCategoriesList;
        for (EndCategory endCategory : endCategoriesList) {
            tabLayout.addTab(tabLayout.newTab().setText(endCategory.getEcatName()));
        }
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager(), tabLayout.getTabCount());
        viewPager.setAdapter(adapter);
        viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
        tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition(), true);
                Log.d(TAG, "onTabSelected: TabID= "+tab.getPosition());
                Log.d(TAG, "onTabSelected: EndPID = "+endCategoriesListGlobal.get(tab.getPosition()).getEcatId());
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {
                Toast.makeText(EndCategoryActivity.this, "Reselected", Toast.LENGTH_SHORT).show();
            }
        });
        adapter.notifyDataSetChanged();

Ниже мой ViewPagerAdapter


        int numberOfTabs;

        ViewPagerAdapter(@NonNull FragmentManager fm, int tabCount) {
            super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
            numberOfTabs = tabCount;
        }

        @NonNull
        @Override
        public Fragment getItem(int position) {
            Log.d(TAG, "getItem: Called");
            return ProductListFragment.newInstance(endCategoriesListGlobal.get(position).getEcatId(), position);
        }

        @Override
        public int getCount() {
            return numberOfTabs;
        }

Below is Product Fragment

открытый класс ProductListFragment extends Fragment {

private static final String TAG = "ProductListFragment";
private RecyclerView recyclerView;
private ProductListAdapter adapter;
private String e_cat_id;

public static ProductListFragment newInstance(String e_cat_id, int position) {
    ProductListFragment fragment = new ProductListFragment();
    Bundle args = new Bundle();
    args.putString("KEY_POSITION",e_cat_id);
    args.putInt("VIEW_PAGER_POSITION",position);
    fragment.setArguments(args);
    return fragment;
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments()!=null){
        this.e_cat_id = getArguments().getString("KEY_POSITION");
    }
}

@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                         @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.product_list_fragment, container, false);
    recyclerView = view.findViewById(R.id.fragment_productlist_rvProductList);
    recyclerView.setLayoutManager(new GridLayoutManager(getContext(), 2));
    recyclerView.setHasFixedSize(true);
    return view;
}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    ProductListViewModel mViewModel = ViewModelProviders.of(this).get(ProductListViewModel.class);
    // TODO: Use the ViewModel
    Log.d(TAG, "onActivityCreated: "+e_cat_id);
    mViewModel.init(e_cat_id);
    mViewModel.getEndProduct().observe(this, endProducts -> {
        adapter = new ProductListAdapter(getContext(), endProducts);
        recyclerView.setAdapter(adapter);
        adapter.notifyDataSetChanged();
    });
}

}

Внизу - ViewModel

public class ProductListViewModel extends ViewModel {

    private Repository repo;
    private MutableLiveData<List<EndProduct>> mutableLiveData;
    public ProductListViewModel() {
        repo = Repository.getInstance();
    }

    void init(String e_cat_id){
        if (mutableLiveData!=null){
            return;
        }
        mutableLiveData = repo.getEndProduct(e_cat_id);
    }
    // TODO: Implement the ViewModel
    LiveData<List<EndProduct>> getEndProduct(){
        return mutableLiveData;
    }
}

Ниже класс репозитория


     public MutableLiveData<List<EndProduct>> getEndProduct(String e_cat_id) {
         Log.d(TAG, e_cat_id);
             endProduct = new MutableLiveData<>();
             Call<List<EndProduct>> call = apiService.getEndProductFromServer(e_cat_id);
             call.enqueue(new Callback<List<EndProduct>>() {
                 @Override
                 public void onResponse(Call<List<EndProduct>> call, Response<List<EndProduct>> response) {
                     if (response.isSuccessful()){
                         if (response.body()!=null){
                             endProduct.setValue(response.body());
                         }
                     }
                 }

                 @Override
                 public void onFailure(Call<List<EndProduct>> call, Throwable t) {
                     Log.e(TAG, "EndProduct");
                 }
             });
        return endProduct;
    }

0
Muhammad Sufyan