Как сменить фрагмент в методе onNewIntent

260
05 января 2017, 05:37

Как сменить фрагмент в методе onNewIntent, если все происходит тут:

 @SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();
   Fragment fragment = null;
   Class fragmentClass = null;
    if(fragmentClass == null) {
        fragmentClass = HelloFragment.class;
    }
    if (id == R.id.nav_camera) {
        fragmentClass = ExamFragment.class;
    } else if (id == R.id.nav_gallery) {
        fragmentClass = ResultsFragment.class;
    } else if (id == R.id.nav_slideshow) {
        fragmentClass = RemindersFragment.class;
    } else if (id == R.id.nav_share) {
    }
    if(fragment == null) {
        try {
            fragment = (Fragment) fragmentClass.newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    // Вставляем фрагмент, заменяя текущий фрагмент
    FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentManager.beginTransaction().replace(R.id.container,fragment).commit();
    // Выделяем выбранный пункт меню в шторке
    item.setChecked(true);
    // Выводим выбранный пункт в заголовке
    setTitle(item.getTitle());

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}
Answer 1

Мне приходит в голову два варианта.

  1. В onCreateOptionsMenu сохранить меню в какое-нибудь поле активити. Когда потребуется, вызвать onNavigationItemSelected(menu.findItem(какой-нибудь id));. Проблема здесь в том, что callback onCreateOptionsMenu будут вызван позже, чем onCreate, так что этого нельзя делать в onCreate.
  2. Хранить набор объектов, которые будут описывать элементы меню. Например, держать эту информацию в классах фрагментов. Т. е., например, вместо setTitle(item.getTitle()); будет setTitle(fragment.getTitle()); и т. д..
  3. Как заметил Юрий, можно создать собственную реализацию интерфейса MenuItem и передавать её в метод onNavigationItemSelected. Это будет нечто среднее между первым и вторым решением.
READ ALSO
Как передавать данные каждые 15 секунд?

Как передавать данные каждые 15 секунд?

Есть приложение, в котором получаю данные с EditText и GPS и отправляю в БД MySQL удаленно через HttpURLConnectionЭто надо делать через каждые 15 секунд после...

255
Не работает метод add в ArrayList

Не работает метод add в ArrayList

Есть готовый код класса коллекцииОн работает

298
Проверить объекты в коллекции в цикле

Проверить объекты в коллекции в цикле

Есть класс SingleWord с полями String word, String alphabet, int iconЕсть коллекция ArrayList<SingleWord>, которая хранит объекты типа SingleWord

273