Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从android中的活动移动到特定选项卡_Android_Android Toolbar_Android Tablayout - Fatal编程技术网

如何从android中的活动移动到特定选项卡

如何从android中的活动移动到特定选项卡,android,android-toolbar,android-tablayout,Android,Android Toolbar,Android Tablayout,我正在使用名为FriendListActivity的以下屏幕: 正如你在这里看到的,我有3个标签,分别是聊天、群组和联系人。每个选项卡都显示了一些内容。例如,组选项卡显示组的数量。单击每个组时,打开组聊天屏幕。现在在组聊天屏幕中,我有一个工具栏。考虑下面的代码: Toolbar toolbarGroupChat = (Toolbar) findViewById(R.id.toolbarGroupChat); setSupportActionBar(toolbarGroupChat);

我正在使用名为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) {

        }
    });
     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);
         }
     }
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时,当前选择的选项卡应该是组选项卡


解决了

编辑的工作代码: 当我们从活动移动到特定选项卡时,需要使用活动的意图传递选项卡编号。使用以下代码处理单击工具栏的“上一步”按钮。重写getSupportParentActivityIntent()方法:

现在,在包含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) {

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

您可能已经创建了一个tabHost,所以当它完成制作时,您应该使用-

tabHost.setCurrentTab(1);
当您想设置另一个选项卡时,可以使用相同的代码和不同的参数


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

从屏幕截图中,您必须使用TableAyout,因此可以使用这两个内置函数

tabLayout.getSelectedTabPosition();
将此选项卡保存在某个变量中,然后在此函数中再次创建该整数值

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

希望这有帮助:)

您也可以使用这段代码:

在群组聊天活动(如群组聊天活动)中添加
公共静态选项卡open=1


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

谢谢您的回复。我已经在使用setCurrentItem()方法。您可以检查我编辑的代码。在我的情况下,每个选项卡都显示列表视图的一些内容。e、 g.组选项卡显示组列表。单击特定组时,会打开组聊天。现在在组聊天屏幕中,单击工具栏上的箭头,我将返回包含三个选项卡的活动。当我从组聊天屏幕返回时,所选选项卡应为“组”选项卡。但它始终将“聊天”选项卡显示为所选选项卡。很抱歉,不够具体。我不是说在OnTabSelectedListener()中使用setCurrentItem()方法。当您从群聊返回到活动时,您需要借助setCurrentItem()方法在那里设置当前项,否则,它将转到默认位置,即零,即您的第一个选项卡。您需要检测您从哪个活动返回、聊天、群组或联系人,然后在ViewPager中设置当前项目。感谢您的回复,但我仍然没有抓住要点。单击工具栏的“后退”按钮时,我应该移动到上一个选项卡。为此,我使用代码工具栏=(工具栏)findViewById(R.id.Toolbar);设置支持操作栏(工具栏);getSupportActionBar().setDisplayHomeAsUpEnabled(true);