Обновить фрагмент из макета вкладки при нажатии - PullRequest
0 голосов
/ 25 июня 2019

У меня есть макет вкладки с 2 фрагментами, и у меня есть панель инструментов с различными параметрами, относящимися к действию, в котором находится пейджер представления.

Когда я нажимаю на опцию панели инструментов, она очищает данные из БДкоторые используются во фрагменте, а затем должны обновить его, чтобы применить изменения на экране.

Но я не могу найти способ обновить фрагмент из действия.

Вот адаптер фрагмента:

 public class FragmentAdapter extends FragmentPagerAdapter


{

    private final List<Fragment>  lstFragment = new ArrayList<>();
    private final List<String> lstTitles = new ArrayList<>();

    public FragmentAdapter(FragmentManager fm) {
        super(fm);
    }


    @Override
    public Fragment getItem(int i) {
        return lstFragment.get(i);
    }

    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return lstTitles.get(position);
    }

    @Override
    public int getCount() {
        return  lstTitles.size();
    }


    public void AddFragment (Fragment fragment , String title)
    {
        lstFragment.add(fragment);
        lstTitles.add(title);
    }

}

Вот как я его называюво фрагментах в основном:

      FragAdapter = new FragmentAdapter(getSupportFragmentManager());

    ((FragmentAdapter) FragAdapter).AddFragment(new FragmentProgramme(),"Programmes");
    ((FragmentAdapter) FragAdapter).AddFragment(new FragmentPlanning(),"Agenda"); //FRAGMENT I WANT TO REFRESH

    mviewpager.setAdapter(FragAdapter);
    mtablayout = (TabLayout) findViewById(R.id.main_tabs);
    mtablayout.setupWithViewPager(mviewpager);

В основном у меня есть опция на панели инструментов, и я хотел бы сделать что-то вроде этого:

 @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int pos = item.getItemId();
        switch (pos)
        {       
                DatabaseAgenda.getInstance(this).dropDB(); //CLEAN DB
                // I would like to find a function like this : ((FragmentAdapter) FragAdapter).refresh(FragmentPlanning, "Agenda");

                break;
        }

        return super.onOptionsItemSelected(item);
    }

Дело в том, чтобы простоуничтожить фрагмент, потому что все данные должны быть удалены с экрана, а затем воссоздать его, чтобы пользователи могли добавлять новые данные к нему

Надеюсь, это понятно, спасибо за вашу помощь

У меня естьнашел много ответов, но никогда не то, что я действительно искал

1 Ответ

0 голосов
/ 25 июня 2019

Вы можете переопределить метод setUserVisibleHint внутри фрагментов, чтобы определить, когда он виден. Данные могут быть обновлены внутри этого метода. Выбор элементов Pageradapter программно вызывает setUserVisibleHint текущего фрагмента. Вам не нужно каждый раз уничтожать фрагменты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...