android - 使用 ViewPager 将数据从 Activity 传递到 Fragments

标签 android android-fragments android-viewpager

我进行了很多研究,但没有找到适合我的案例的解决方案。

这是我的 Activity :

public class ProfileActivity extends AppCompatActivity {



@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);



        setContentView(R.layout.activity_profile);



        //region FindViews
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        viewPager = (ViewPager) findViewById(R.id.viewpager);
        tabLayout = (PagerSlidingTabStrip) findViewById(R.id.tabs);
        //endregion

        //region ViewPager
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        setupViewPager(viewPager);
        viewPager.setOffscreenPageLimit(5);
//        tabLayout.setupWithViewPager(viewPager);
        tabLayout.setViewPager(viewPager);
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                switch (position) {
                    case 0:
                        changeColor(ContextCompat.getColor(getApplicationContext(), R.color.theme_red_primary));
                        break;
                    case 1:
                        changeColor(ContextCompat.getColor(getApplicationContext(), R.color.theme_yellow_primary));
                        break;
                    case 2:
                        changeColor(ContextCompat.getColor(getApplicationContext(), R.color.theme_green_primary));
                        break;
                    case 3:
                        changeColor(ContextCompat.getColor(getApplicationContext(), R.color.theme_blue_primary));
                        break;
                    case 4:
                        changeColor(ContextCompat.getColor(getApplicationContext(), R.color.theme_black_primary));
                        break;
                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
        //endregion

        extrasForFragment = new Bundle();
        extrasForFragment.putInt("name", 3);

        //region Get Extras from Intent
        extras = getIntent().getExtras();
        if (extras != null) {
            userID = extras.getInt(StaticVariables.INTENT_USERID, -1);
            Log.e("ISER", "dd " + userID);
            OverViewFragment.newInstance().setArguments(extrasForFragment);
        }
        //endregion

        setTitle("");
    }

class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }

        @Override
        public int getCount() {
            return mFragmentList.size();
        }

        public void addFrag(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    }





private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFrag(OverViewFragment.newInstance(), getString(R.string.overview));
        adapter.addFrag(new Fragment2(), getString(R.string.text));
        adapter.addFrag(new Fragment3(), getString(R.string.text));
        adapter.addFrag(new Fragment4(), getString(R.string.text));
        adapter.addFrag(new Fragment5(), getString(R.string.text));
        viewPager.setAdapter(adapter);
    }
}

但它不会工作..这是我的 fragment :

public class OverViewFragment extends Fragment {
 public static OverViewFragment newInstance() {
        return new OverViewFragment();
    }
 @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        Bundle b = getArguments();
        if (b != null) {
            Log.e("EXTRAS", "sind: " + b.toString() + " und: " + b.getInt("name", 0));
        } else {
            Log.e("FAIL", "...");
        }
        return inflater.inflate(R.layout.fragment_recyclerview, container, false);
    }
}

但是没有用。我试过这个: Send data from activity to fragment in android 和这个: Passing value between activity to fragment on android 但是什么都不想工作.. 我希望有解决方案。感谢您的帮助!

最佳答案

你唯一打电话的地方setArgumentsOverViewFragment.newInstance().setArguments(extrasForFragment); 行在你的 ViewPager 中没有使用.您想在 setupViewPager 中设置参数方法,所以像这样:

Fragment overviewFrag = OverViewFragment.newInstance();
overviewFrag.setArguments(<args_bundle>);
adapter.addFrag(overviewFrag, getString(R.string.overview));

关于android - 使用 ViewPager 将数据从 Activity 传递到 Fragments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36285269/

相关文章:

android - 将 Crashlytics 集成到库项目中

java - 如何将应用设置为默认应用或让用户选择应用?

android - ObservableScrollView 中的自定义 ViewPager 无法正确测量高度

Android [GetToken] GetToken 失败,状态代码为 : UNREGISTERED_ON_API_CONSOLE

android - 如何在更新 Adapter 后更新 ViewPager 中的 Fragments?

android - ViewPager - 从 Activity 中更新 fragment

java - 使用按钮上的 OnClickListener 返回 Android 列表中的位置

android - 第一次在 google maps android 中不调用 onMapLoaded(),onMapLoaded 在 google maps android 中不起作用

android - fragment 中操作栏中的搜索 View

android - 在 viewpager 中检测触摸/点击事件