【问题标题】:How to move to a specific tab from an activity in android如何从android中的活动移动到特定选项卡
【发布时间】:2016-08-04 01:04:49
【问题描述】:

我正在使用名为 FriendListActivity 的以下屏幕:

正如您在此处看到的,我是 3 个选项卡,分别名为 CHAT、GROUPS 和 CONTACTS。每个选项卡都显示一些内容。例如,组选项卡显示组数。单击每个组时,会打开群聊屏幕。现在在群聊中屏幕,我有一个工具栏。考虑以下代码:

 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;
    }
}

单击工具栏上的箭头时,我的应用程序将移动到包含三个选项卡的屏幕。我的问题是当前选择的选项卡始终是 CHAT 选项卡,当我从活动移动到 FriendListActivity 时。当我从群聊移动Screen to FriendListActivity,当前选中的tab应该是GROUPS Tab。


解决了。

编辑的工作代码: 当我们从 Activity 移动到特定的选项卡时,我们需要使用 Activity 的意图传递 TAb 编号。使用以下代码处理单击工具栏的后退按钮。重写 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);
         }
     }

【问题讨论】:

    标签: android android-toolbar android-tablayout


    【解决方案1】:

    使用 ViewPager 对象的 setCurrentItem(int position) 方法移动到特定选项卡。

    【讨论】:

    • 感谢您的回复。我已经在使用 setCurrentItem() 方法。您可以检查我编辑的代码。在我的情况下,每个选项卡都显示列表视图的一些内容。例如组选项卡正在显示组列表。单击特定组时,会打开群聊。现在在群聊屏幕中,单击工具栏上的箭头时,我将返回包含三个选项卡的活动。当我返回表单组时聊天屏幕,选择的选项卡应该是 GROUPS TAB。但它始终将 CHAT 选项卡显示为选定的 TAB。
    • 抱歉不够具体。我不是在谈论在 OnTabSelectedListener() 中使用 setCurrentItem() 方法。
    • 当您从群聊返回到您的活动时,您需要通过 setCurrentItem() 方法设置当前项目,否则,它将转到默认位置为零,即您的第一个选项卡.
    • 您将需要检测您从哪个 Activity、聊天或群组或联系人返回,然后在 ViewPager 中设置当前项目。
    • 感谢您的回复,但我仍然不明白这一点。单击工具栏的后退按钮时,我应该移至上一个 TAB。为此,我正在使用代码工具栏工具栏 = (工具栏) findViewById(R.id.toolbar); setSupportActionBar(工具栏); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    【解决方案2】:

    你可能已经创建了一个tabHost,所以当它完成后,你应该使用-

    tabHost.setCurrentTab(1);
    

    而且您可以在想要设置另一个选项卡时使用具有不同参数的相同代码。

    Ref

    【讨论】:

      【解决方案3】:

      从截图中您必须使用 Tablayout,因此您可以在构建函数中使用这两个。

      tabLayout.getSelectedTabPosition();
      

      将此选项卡保存在某个变量中,然后 onCreate 在此函数中设置该整数值..

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

      希望这会有所帮助..:)

      【讨论】:

        【解决方案4】:

        你也可以使用这段代码:

        在群聊活动(比如 group_chat_activity)中添加public static TabToOpen = 1

        然后在 onResume() 的活动中使用 setCurrentTab(group_chat_activity.TabToOpen),您的 ViewPager 对象将移动到特定选项卡。当您需要一个按钮来访问滑动活动中的特定选项卡时,这特别有用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多