对不起,如果这个问题不合适,我需要一些帮助。我有一个3标签应用,可在打开应用时查看第一个标签。
目标:注册后,用户将在第三个标签中查看其个人资料。
我做了什么:在RegisterActivity
中,我在bundle中设置了一个值,该值将传递给MainActivity
Intent intent = new Intent(RegisterActivity.this, MainActivity.class);
intent.putExtra("profile", 2);
intent.putExtra("from", "register");
所以在MainActivity
,
profile = getIntent().getExtras().getInt("profile");
from = getIntent().getExtras().getString("from");
final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
final PagerAdapter adapter = new PagerAdapter (getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(profile);
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
我设法从RegisterActivity
获得了价值,但我不知道我应该在哪里放置int profile
值。我希望将值传递给getItem
中的PagerAdapter
方法。
public class PagerAdapter extends FragmentStatePagerAdapter {
int mNumOfTabs;
public PagerAdapter(FragmentManager fm, int NumOfTabs) {
super(fm);
this.mNumOfTabs = NumOfTabs;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
SearchGroupsFragment searchGroupsFragment = new SearchGroupsFragment();
return searchGroupsFragment;
case 1:
RegisterGroupFragment registerGroupFragment = new RegisterGroupFragment();
return registerGroupFragment;
case 2:
ProfileFragment profileFragment = new ProfileFragment();
return profileFragment;
default:
return null;
}
}
@Override
public int getCount() {
return mNumOfTabs;
}
}
这样当用户成功注册时,他们将直接查看第三个选项卡。或者还有其他方法可以查看吗?
谢谢。
修改
我按照下面的答案设法得到了我想要的东西 - 在RegisterActivity
之后,我得到的视图是第三个标签及其布局。但当我移动到第二个或第一个标签时,布局不会改变。没有动画或标签更改的动作。简单地说,第三个标签的布局被卡住了。并没有改变第二和第一个标签。
答案 0 :(得分:1)
我建议您将此部分代码移至 MainActivity OnCreate
final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
final PagerAdapter adapter = new PagerAdapter (getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
像这样开始 RegisterActivity
Intent intent = new Intent(this, RegisterActivity.class);
startActivityForResult(intent, 1001);
在 RegisterActivity 中,将结果返回 MainActivity ,就像这样
Intent intent = new Intent();
intent.putExtra("profile", 2);
intent.putExtra("from", "register");
setResult(Activity.RESULT_OK, intent);
finish();
在 MainActivity 中,覆盖onActivityResult
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == 1001 && resultCode == RESULT_OK){
int profile = data.getExtras().getInt("profile");
String from = data.getExtras().getString("from");
viewPager.setCurrentItem(profile)
}
}
答案 1 :(得分:0)
您可以使用
将viewpager移动到特定页面viewPager.setCurrentItem(index or position of page);
注意:在viewPager.setApapter();
之后调用此方法祝福。