我正在开发名为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时。当我从群聊时移动屏幕到FriendListActivity,当前选中的选项卡应为GROUPS Tab。
解决。
编辑工作代码: 当我们从一个Activity移动到一个特定的选项卡时,我们需要使用Activity中的Intent传递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);
}
}
答案 0 :(得分:4)
使用ViewPager对象的setCurrentItem(int position)方法移动到特定选项卡。
答案 1 :(得分:0)
答案 2 :(得分:0)
从截图中你必须使用Tablayout,所以你可以在那里使用这两个构建函数。
userService
将此选项卡保存在某个变量中,然后onCreate在此函数中设置该整数值..
tabLayout.getSelectedTabPosition();
希望这会有所帮助.. :)
答案 3 :(得分:0)
你也可以使用这段代码:
在群聊活动中添加public static TabToOpen = 1
(例如group_chat_activity)。
然后在setCurrentTab(group_chat_activity.TabToOpen)
活动中使用onResume()
,其中您的ViewPager对象将移动到特定标签。当您需要一个按钮来访问滑动活动中的特定选项卡时,这非常有用。