Управление фрагментами с ViewPager в NavigationDrawer

319
01 марта 2017, 19:25

Есть созданный NavigationDrawer, к нему подключены табы. Получается так, что первый самый Item с табами (фрагментами) в дровере работает корректно, а уже 2-ой выводит ту же информацию (TextView), ту что находиться в первом Item и в его табах.
Подскажите как это исправить, в коде, если можно?

Вот, собственно, сам код 2-ого итема и его табов в активити:

MainActivity:

public class MainActivity extends AppCompatActivity {
        private static final int LAYOUT = R.layout.activity_main;
        private Drawer.Result drawerMenu;
        private ViewPager viewPager;
        private Toolbar toolbar;
        private TabLayout tabLayout;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            setTheme(R.style.myTheme2);
            super.onCreate(savedInstanceState);
            setContentView(LAYOUT);
            initTabs();

            // Инициализируем Toolbar
            toolbar = (Toolbar)findViewById(R.id.toolbar);
            if (toolbar !=null) {
                setSupportActionBar(toolbar);
                getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            }
            initializeNavigationDrawer(toolbar);

        }
private void initTabs() {
    viewPager = (ViewPager) findViewById(R.id.viewPager);
    // Инициализируем TabLayout
    tabLayout = (TabLayout)findViewById(R.id.tabLayout);
    TabFragmentFish adapter = new TabFragmentFish(getSupportFragmentManager());
    viewPager.setAdapter(adapter);
    tabLayout.setupWithViewPager(viewPager);
}

@Override
public void onBackPressed() {
    if (drawerMenu != null && drawerMenu.isDrawerOpen()) {
        drawerMenu.closeDrawer();
    } else {
        super.onBackPressed();
    }
}
//Инициализация Дравера
private void initializeNavigationDrawer(Toolbar toolbar) {
            drawerMenu = new Drawer()
            .withActivity(this)
            .withToolbar(toolbar)
            .withActionBarDrawerToggle(true)
            .withHeader(R.layout.drawer_header)
            //Добавление Итемов в шторку
            .addDrawerItems(
                    new PrimaryDrawerItem()
                            .withName(R.id.aqua_fish)
                            .withIdentifier(1)
                            .withIcon(FontAwesome.Icon.faw_circle),
                    new PrimaryDrawerItem()
                            .withName(R.id.aqua_plant)
                            .withIdentifier(2)
                            .withIcon(FontAwesome.Icon.faw_leaf),
                    new PrimaryDrawerItem()
                            .withName(R.id.aqua_water)
                            .withIdentifier(3)
                            .withIcon(FontAwesome.Icon.faw_tint),
                    new PrimaryDrawerItem()
                            .withName(R.id.aqua_lighting)
                            .withIdentifier(4)
                            .withIcon(FontAwesome.Icon.faw_lightbulb_o),
                    new PrimaryDrawerItem()
                            .withName(R.id.aqua_co2)
                            .withIdentifier(5)
                            .withIcon(FontAwesome.Icon.faw_circle),
                    new PrimaryDrawerItem()
                            .withName(R.id.aqua_filtration)
                            .withIdentifier(6)
                            .withIcon(FontAwesome.Icon.faw_filter),
                    //--------------------------------------------- Secondary
                    new DividerDrawerItem(),
                    new SecondaryDrawerItem()
                            .withName(R.id.about)
                            .withIdentifier(7),
                    new SecondaryDrawerItem()
                            .withIdentifier(8)
                            .withName(R.id.exit))
                    //Реализуем клик по айтэмам
                    .withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() {
                        @Override
                        public void onItemClick(AdapterView<?> parent, View view, int position, long id, IDrawerItem drawerItem) {
                            switch (drawerItem.getIdentifier()){
                                case 1:
                                    TabFragmentFish adapter = new TabFragmentFish(getSupportFragmentManager());
                                    viewPager.setAdapter(adapter);
                                    tabLayout.setupWithViewPager(viewPager);
                                    break;
                                case 2:
                                    TabFragmentAdapterPlants adapterPlants = new TabFragmentAdapterPlants(getSupportFragmentManager());
                                    viewPager.setAdapter(adapterPlants);
                                    tabLayout.setupWithViewPager(viewPager);
                                    break;
                                //Мини окошко "Об авторе с закрытием ОК"
                                case 7:
                                    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this, R.style.AppCompatAlertDialogStyle);
                                    builder
                                            .setTitle("Об авторе")
                                            .setMessage("Автор:Артем Мишуровский"+"\n\nEmail: artm.mishurovskiy@gmail.com")
                                            .setCancelable(false)
                                            .setNegativeButton("Ок", new DialogInterface.OnClickListener() {
                                                @Override
                                                public void onClick(DialogInterface dialogInterface, int i) {
                                                    dialogInterface.cancel();
                                                }
                                            });
                                    AlertDialog alertDialog = builder.create();
                                    alertDialog.show();
                                    break;
                                //Выход из программы
                                case 8:
                                    finish();
                                    break;
                            }
                        }
                    })
            .build();
  }
}

Сам адаптер и в нем созданы табы:

public class TabFragmentAdapterPlants extends FragmentPagerAdapter {
//Create massive
private String[] tabs;
private FragmentTransaction fTrans;
public TabFragmentAdapterPlants(FragmentManager fm) {
    super(fm);
    //Create tabs
    tabs= new String[] {
            "Растения",
            "Болезни растений",
            "Водоросли"
    };
}

//Получение позиции Табов что б передать их в свитч
@Override
public CharSequence getPageTitle(int position) {
    return tabs[position];
}

//Переключение между фрагменами с помощью позиции 0,1,2
@Override
public Fragment getItem(int position) {
    switch (position){
        case 0:
            return FragmentPlants.getInstance();
        case 1:
            return FragmentsPlantsDisease.getInstance();
        case 2:
            return FragmentPlantsAlgae.getInstance();
    }
    return null;
}

//табс в ширину !!
@Override
public int getCount() {
    return tabs.length;
}
}

Фрагмент, на который переключается адаптер:

public class FragmentPlants extends Fragment {
private static final int LAYOUT = R.layout.fragments_plants2;
private View view;
public static FragmentPlants getInstance(){
    Bundle args = new Bundle();
    FragmentPlants fragmentPlants = new FragmentPlants();
    fragmentPlants.setArguments(args);
    return fragmentPlants;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    view = inflater.inflate(LAYOUT, container, false);
    return view;
}
}
Answer 1

Или у Вас одинаковый layout для фрагментов, или viewPager не обновляет адаптер. Во втором случае может поможет этот ответ

READ ALSO
как вытащить текст из .doc или .docx на Java?

как вытащить текст из .doc или .docx на Java?

Я хочу вытащить текст изdoc или

256
could not execute query. Программа не видит таблицы

could not execute query. Программа не видит таблицы

Я проблему свою уже описывал но сейчас сделаю это более конкретноПрограмма стоит на сервере, работает день, каждую ночь программа падает

198
Чат Java (по аналогии чата World Of Tanks) [требует правки]

Чат Java (по аналогии чата World Of Tanks) [требует правки]

Кто может дать качественную документацию по созданию чата с хабров и тд

204
Разделение приложения на сервисы

Разделение приложения на сервисы

Услышал, что современные веб-приложения строятся из независимых сервисовУ меня есть сервер tomcat, java ee и сервер Mysql

214