Загрузка TabLayout в первый раз, а затем прекратить загрузку - PullRequest
0 голосов
/ 06 июля 2019

У меня есть TabLayout с использованием ViewPager и FragmentPagerAdapter. Этот TabLayout имеет два фрагмента. Существует нижняя навигационная панель, соединяющая TabLayout и два других фрагмента. И при первом запуске TabLayout загружается. Но после перехода к другому фрагменту из Bottom Navigation, TabLayout ничего не загружает.

Ниже приведен код из действия BottomNavigation

     BottomNavigationView.OnNavigationItemSelectedListener navigationItemSelected = menuItem -> {
        switch (menuItem.getItemId()) {

            case R.id.navigation_tv:
                getSupportFragmentManager().beginTransaction().replace(R.id.frame_container_bottomnav,
                        tvShow).commit();
                fragment = tvShow;
                title = "Tv";
                position = 0;

                break;
            case R.id.navigation_film:
                getSupportFragmentManager().beginTransaction().replace(R.id.frame_container_bottomnav,
                        filmShow).commit();
                fragment = filmShow;
                title = "Film";
                position = 1;

                break;
            case R.id.navigation_favorit:
                getSupportFragmentManager().beginTransaction().replace(R.id.frame_container_bottomnav,
                        favorits).commit();
                fragment = favorits;
                title = "Favorit";
                position = 2;
                break;
        }

        toolbar.setTitle(title);
        return true;
    };

ниже код от TabLayout

class Favorits : Fragment() {

private var position: Int? = null;
private var adapter: ViewPagerAdapter? = null
private var fragment: Fragment? = Fragment()
private lateinit var tabLayout: TabLayout
private lateinit var viewPager: ViewPager


/* Masukkan adapter untuk ViewPager */

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                          savedInstanceState: Bundle?): View? {
    // Inflate the layout for this fragment
    val view = inflater.inflate(R.layout.fragment_favorits, container, false)

    val toolbar = view.findViewById<Toolbar>(R.id.toolbar)

    // placing toolbar in place of action bar

    /*1. Membuat tabLayout*/
    tabLayout = view.findViewById(R.id.tablayout)
    viewPager = view.findViewById(R.id.viewpager)


    adapter = ViewPagerAdapter(fragmentManager)

    // 2. Adapter Setrup
    viewPager.offscreenPageLimit = 2
    viewPager.adapter = adapter



    if (savedInstanceState == null) {
        tabLayout.setupWithViewPager(viewPager)

    } else {
        fragment = fragmentManager?.getFragment(savedInstanceState, "fragment")
        tabLayout.setupWithViewPager(viewPager)

    }

    tabLayout.setOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
        override fun onTabSelected(tab: TabLayout.Tab) {
            position = tab.position
            viewPager.currentItem = position as Int

            fragment = adapter!!.getItem(position!!)
        }

        override fun onTabUnselected(tab: TabLayout.Tab) {

        }

        override fun onTabReselected(tab: TabLayout.Tab) {

        }
    })


    return view
}

override fun onSaveInstanceState(outState: Bundle) {
    if (fragment?.isAdded!!) {
        fragmentManager?.putFragment(outState, "fragment", fragment!!)
    }
    super.onSaveInstanceState(outState)
}

Первый фрагмент

public class FavoritShow extends Fragment  {

private FavoritRecycler favoritRecycler;
private TvHelper tvHelper;
private ArrayList<Favorit> listFavorit = new ArrayList<>();
private static ProgressBar progressBar;



public FavoritShow() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    final View view = inflater.inflate(R.layout.fragment_favorit, container, false);

    RecyclerView recyclerView = view.findViewById(R.id.favorit_tv_recycler);
    progressBar = view.findViewById(R.id.progress_bar);

    recyclerView.setVisibility(View.INVISIBLE);
    progressBar.setVisibility(VISIBLE);


    LayoutManager layoutManager = new LinearLayoutManager(getContext());
    recyclerView.setLayoutManager(layoutManager);

    favoritRecycler = new FavoritRecycler(getContext());

    tvHelper = new TvHelper(getContext());
    tvHelper = TvHelper.getInstance(getContext());

    tvHelper.open();

    listFavorit = tvHelper.getAllFavorits();

    favoritRecycler.setListFavorits(listFavorit);

    recyclerView.setAdapter(favoritRecycler);

    progressBar.setVisibility(View.GONE);
    recyclerView.setVisibility(VISIBLE);

    return view;
}

Что-то не так с кодом? Спасибо за ваши ответы.

1 Ответ

0 голосов
/ 06 июля 2019

Проверьте FragmentVariable это инициализировать так или нет:

tvShow = new TvShow(); filmShow = new FilmShow(); favorits = new Favoirts();

Или вы можете сделать так

switch (menuItem.getItemId()) {

        case R.id.navigation_tv:
            TvShow tvShow = new TvShow(); 
                             getSupportFragmentManager().beginTransaction().replace(R.id.frame_container_bottomnav,
                    tvShow).commit();
            title = "Tv";                
            position = 0;
            break;
       case R.id.navigation_film:
            FilmShow filmShow = new FilmShow();               
            getSupportFragmentManager().beginTransaction().replace(R.id.frame_container_bottomnav,
                    filmShow).commit(); 
            title = "Film";               
            position = 1;
            break;
       case R.id.navigation_favorit:
            Favorits fovorits = new Favorits();
            getSupportFragmentManager().beginTransaction().replace(R.id.frame_container_bottomnav,
                    favorits).commit();
            fragment = favorits;
            title = "Favorit";
            position = 2;
            break;
    }
...