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