Как перейти на определенную вкладку из активности в Android

Я работаю над следующим экраном с именем FriendListActivity:

Снимок экрана Как вы можете видеть здесь, у меня есть 3 вкладки с именами ЧАТ, ГРУППЫ и КОНТАКТЫ. На каждой вкладке отображается какое-то содержимое. Например, вкладка "Группы" отображает количество групп. При нажатии на каждую группу, группа Открывается экран чата. Теперь на экране группового чата у меня есть панель инструментов. Рассмотрим следующий код:

 Toolbar toolbarGroupChat = (Toolbar) findViewById(R.id.toolbarGroupChat);
  setSupportActionBar(toolbarGroupChat);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setTitle(upperCase(group_name));


  //ViewPager
    viewPager = (ViewPager) findViewById(R.id.viewPager);
    //Initializing PagerAdapter
    PagerAdapter pagerAdapter = new PagerAdapter(getSupportFragmentManager(), tabLayout.getTabCount());
    viewPager.setAdapter(pagerAdapter);

    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            viewPager.setCurrentItem(tab.getPosition());
        }

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

        }

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

        }
    });

PagerAdapter.java

    public class PagerAdapter extends FragmentStatePagerAdapter {
    private int noOfTabs;

    public PagerAdapter(FragmentManager fm, int noOfTabs) {
        super(fm);
        this.noOfTabs = noOfTabs;
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                ChatFragment chatFragment = new ChatFragment();
                return chatFragment;
            case 1:
                GroupsFragment groupsFragment = new GroupsFragment();
                return groupsFragment;
            case 2:
                ContactsFragment contactsFragment = new ContactsFragment();
                return contactsFragment;
            default:
                return null;
        }
    }

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

При нажатии стрелки на панели инструментов мое приложение перемещается на экран, содержащий три вкладки. Моя проблема заключается в том, что текущая выбранная вкладка всегда является вкладкой ЧАТ, когда я перехожу от активности к FriendListActivity. Когда я перехожу с экрана группового чата на FriendListActivity , текущая выбранная вкладка должна быть вкладкой ГРУППЫ.


Решено.

Отредактированный рабочий код: когда мы переходим от Activity к определенной вкладке, нам нужно передать номер TAb, используя намерения из Activity. Используйте следующий код для обработки щелчка по кнопке возврата на панели инструментов. Отмените метод getSupportParentActivityIntent () :

public Intent getSupportParentActivityIntent() {
    final Bundle bundle = new Bundle();
    final Intent intent = new Intent(this, FriendsListActivity.class);
    bundle.putString("TabNumber", tab_number);
    intent.putExtras(bundle);
    return intent;
}

Теперь внутри действия, содержащего 3 вкладки, используйте следующий код:

     final Intent intent = getIntent();
        if (intent.hasExtra("TabNumber")) {
            String tab = intent.getExtras().getString("TabNumber");
            Log.e("TabNumberFriendList",tab);
            switchToTab(tab);
        }
 public void switchToTab(String tab){
         if(tab.equals("0")){
             viewPager.setCurrentItem(0);
         }else if(tab.equals("1")){
             viewPager.setCurrentItem(1);
         }else if(tab.equals("2")){
             viewPager.setCurrentItem(2);
         }
     }

person Deepak Rattan    schedule 13.04.2016    source источник


Ответы (4)


Используйте метод setCurrentItem (int position) вашего объекта ViewPager, чтобы перейти на определенную вкладку.

person Varun Kumar    schedule 13.04.2016
comment
Спасибо за ответ. Я уже использую метод setCurrentItem (). Вы можете проверить мой отредактированный код. В моем случае на каждой вкладке отображается некоторое содержимое списка. например На вкладке "Группы" отображается список групп. При нажатии на определенную группу открывается групповой чат. Теперь на экране группового чата. Щелкнув стрелку на панели инструментов, я возвращаюсь к активности, содержащей три вкладки. Когда я возвращаюсь из формы "Группа" Экран чата, выбранная вкладка должна быть ВКЛАДКОЙ ГРУПП, но вкладка ЧАТ всегда отображается как выбранная. - person Deepak Rattan; 13.04.2016
comment
Извините за недостаточно конкретную информацию. Я не говорю об использовании метода setCurrentItem () внутри OnTabSelectedListener (). - person Varun Kumar; 13.04.2016
comment
Когда вы вернетесь из группового чата в свою активность, вам нужно установить там текущий элемент с помощью метода setCurrentItem (), иначе он перейдет в позицию по умолчанию, которая равна нулю, то есть вашей первой вкладке. - person Varun Kumar; 13.04.2016
comment
Вам нужно будет определить, из какого Activity вы вернулись, из чата, группы или контактов, а затем установить текущий элемент внутри ViewPager. - person Varun Kumar; 13.04.2016
comment
Спасибо за ответ, но я все еще не понимаю. Нажав кнопку «Назад» на панели инструментов, я должен перейти на предыдущую вкладку. Для этого я использую панель инструментов кода Toolbar = (Toolbar) findViewById (R.id. .toolbar); setSupportActionBar (панель инструментов); getSupportActionBar (). setDisplayHomeAsUpEnabled (истина); - person Deepak Rattan; 13.04.2016
comment
Это добавлено в файл манифеста ‹activity android: name = .activity.FriendsListActivity android: parentActivityName = .activity.WelcomeActivity› - person Deepak Rattan; 13.04.2016
comment
Нажав кнопку «Назад», вы перейдете к предыдущему действию, а не к вкладке, если вы не изменили поведение по умолчанию. - person Varun Kumar; 13.04.2016
comment
Код файла манифеста, который вы упомянули выше, отвечает только за изменение вашей Activity, то есть за возвращение вас к родительской Activity из вашей дочерней активности. Он не несет ответственности за изменение позиции вашей вкладки. - person Varun Kumar; 13.04.2016
comment
Когда вы вернетесь обратно к родительской активности из дочерней активности, вам необходимо указать позицию для вашей вкладки внутри метода setCurrentItem () пейджера просмотра. Если вы этого не сделаете, он вернется к исходному или нулевому положению, то есть к первой вкладке. - person Varun Kumar; 13.04.2016
comment
Позвольте нам продолжить это обсуждение в чате. - person Deepak Rattan; 13.04.2016
comment
Конечно, я в чате. - person Varun Kumar; 13.04.2016
comment
Как вы можете видеть, у меня есть три вкладки. При нажатии на вкладку «Группа» открывается представление списка, содержащее список групп. При нажатии определенной группы открывается действие группового чата. При нажатии кнопки «Назад» на панели инструментов вкладка «Группа» отображается текущая вкладка.Она отлично работает для этого.Но для вкладки ЧАТ и ВКЛАДКИ КОНТАКТЫ она не работает. Она всегда выдает мне ВКЛАДКУ ЧАТА. При щелчке по элементам вкладки ЧАТ И КОНТАКТЫ открывается SingleChatActivity. Я передаю номер вкладки через намерение в SIngleChatACtivity, но у меня это не работает. - person Deepak Rattan; 13.04.2016
comment
Привет Дипак. Я видел ваш обновленный код и ответил вам в чате. Пожалуйста, посмотрите. - person Varun Kumar; 13.04.2016

Возможно, вы создали tabHost, поэтому, когда он будет создан, вы должны использовать -

tabHost.setCurrentTab(1);

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

Ссылка

person Darpan    schedule 13.04.2016

Как показано на скриншоте, вы должны использовать Tablayout, так что оттуда вы можете использовать эти две функции в сборке.

tabLayout.getSelectedTabPosition();

Сохраните эту вкладку в какой-либо переменной, а затем onCreate установите это целочисленное значение в этой функции ..

tabLayout.getTabAt(<Your last selected tab>);

Надеюсь это поможет..:)

person Jd Prajapati    schedule 13.04.2016

Вы также можете использовать этот фрагмент кода:

Добавьте public static TabToOpen = 1 в групповой чат (скажем, group_chat_activity).

затем используйте setCurrentTab(group_chat_activity.TabToOpen) в onResume() активности, когда ваш объект ViewPager должен перейти на определенную вкладку. Это особенно полезно, когда вам нужна кнопка для доступа к определенной вкладке в скользящем действии.

person Community    schedule 14.07.2017