将值从活动传递到Fragment getItem(int position)

时间:2016-11-01 13:57:43

标签: android android-fragments android-viewpager android-toolbar android-tablayout

对不起,如果这个问题不合适,我需要一些帮助。我有一个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之后,我得到的视图是第三个标签及其布局。但当我移动到第二个或第一个标签时,布局不会改变。没有动画或标签更改的动作。简单地说,第三个标签的布局被卡住了。并没有改变第二和第一个标签。

2 个答案:

答案 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();

之后调用此方法

祝福。