如何从 android 中的 activity 移动到特定选项卡
How to move to a specific tab from an activity in android
我正在处理以下名为 FriendListActivity 的屏幕:
正如您在这里看到的,我有 3 个选项卡,分别名为聊天、组和联系人。每个选项卡都显示一些 contents.For 示例组选项卡显示 groups.On 单击每个组的数量,打开群聊屏幕。现在在群聊屏幕中,我有一个工具栏。考虑以下代码:
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;
}
}
单击工具栏上的箭头后,我的应用程序移动到包含三个 tabs.My 的屏幕,问题是当我从 activity 移动到 FriendList 时,当前选择的选项卡始终是 CHAT 选项卡Activity 。当我从群聊屏幕移动到朋友列表时Activity,当前选择的标签应该是群组标签。
已解决。
编辑后的工作代码:
当我们从 Activity 移动到特定选项卡时,我们需要使用来自 Activity.Use 的意图传递 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个标签的activity里面,使用下面的代码:
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);
并且您可以在任何时候使用具有不同参数的相同代码来设置另一个选项卡。
Ref
使用 ViewPager 对象的 setCurrentItem(int position) 方法移动到特定选项卡。
从屏幕截图来看,您必须使用 Tablayout,因此您可以从那里在构建函数中使用这两个。
tabLayout.getSelectedTabPosition();
将此选项卡保存在某个变量中,然后在 onCreate 中在此函数中设置该整数值。
tabLayout.getTabAt(<Your last selected tab>);
希望这对您有所帮助..:)
你也可以使用这段代码:
在群聊中添加public static TabToOpen = 1
activity(比如group_chat_activity)。
然后在 activity 的 onResume()
中使用 setCurrentTab(group_chat_activity.TabToOpen)
,您的 ViewPager 对象将移动到特定选项卡。当您需要一个按钮来访问滑动中的特定选项卡时,这特别有用 activity.
我正在处理以下名为 FriendListActivity 的屏幕:
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;
}
}
单击工具栏上的箭头后,我的应用程序移动到包含三个 tabs.My 的屏幕,问题是当我从 activity 移动到 FriendList 时,当前选择的选项卡始终是 CHAT 选项卡Activity 。当我从群聊屏幕移动到朋友列表时Activity,当前选择的标签应该是群组标签。
已解决。
编辑后的工作代码: 当我们从 Activity 移动到特定选项卡时,我们需要使用来自 Activity.Use 的意图传递 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个标签的activity里面,使用下面的代码:
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);
并且您可以在任何时候使用具有不同参数的相同代码来设置另一个选项卡。
Ref
使用 ViewPager 对象的 setCurrentItem(int position) 方法移动到特定选项卡。
从屏幕截图来看,您必须使用 Tablayout,因此您可以从那里在构建函数中使用这两个。
tabLayout.getSelectedTabPosition();
将此选项卡保存在某个变量中,然后在 onCreate 中在此函数中设置该整数值。
tabLayout.getTabAt(<Your last selected tab>);
希望这对您有所帮助..:)
你也可以使用这段代码:
在群聊中添加public static TabToOpen = 1
activity(比如group_chat_activity)。
然后在 activity 的 onResume()
中使用 setCurrentTab(group_chat_activity.TabToOpen)
,您的 ViewPager 对象将移动到特定选项卡。当您需要一个按钮来访问滑动中的特定选项卡时,这特别有用 activity.