繁体   English   中英

在使用具有不同片段/布局的视图寻呼机时如何传递片段参数?

[英]How pass fragment arguments while using a view pager with different fragments/layouts?

目标 :使用片段参数将字符串值从TextView传递到新片段TextView ,但在FragmentPagerAdapter使用具有不同layouts/fragmentsViewPager时。

问题 :新片段永远不会从前一个片段接收片段参数。

我的设置 :我的Activity托管了ViewPagerFragmentPagerAdapter 我重写了FragmentPagerAdapters getItem(int position)方法,根据ViewPager的当前位置创建一个新的fragment实例。 现在我的适配器中只有两个Fragments ,但是在克服这个障碍后会添加更多Fragments 我使用newInstance()技术传递Fragment的参数,但没有传递任何东西。

相关代码

我的FragmentPagerAdapter代码:

//this is a variable that I pass in as the newInstanct() methods parameter,
// I update   this variable from my fragments constantly
public static String fragmentArgumentsValue = "";

mViewPager.setAdapter(new FragmentPagerAdapter(fm) {


            @Override
            public int getCount() {

                return NUMBER_OF_VIEWS;
            }

            @Override
            public Fragment getItem(int position) {
                switch (position) {
                case 0:
                    Log.d(TAG, "---In getPosition(), position 0---");

                    return Frag1
                            .newInstance(fragmentArgumentsValue);

                case 1:
                    Log.d(TAG, "---In getPosition(), position 1---");

                    return frag2
                            .newInstance(fragmentArgumentsValue);

                default:
                    Log.d(TAG, "---In getPosition(), DEFAULT---");

                    return frag1
                            .newInstance(fragmentArgumentsValue);
                }

            }
        });

其中一个片段newInstance()方法:

public static Fragment newInstance(String fragmentArgumentsValue) {
    Frag1 f = new Frag1();
    Bundle bun = new Bundle();
    bun.putString(KEY_FRAGMENT_ARGUMENTS_STRING, fragmentArgumentsValue);
    f.setArguments(bun);
    return f;
}

获取片段参数:

String argString = getArguments().getString(
        KEY_FRAGMENT_ARGUMENTS_STRING);
if (argString.length() != 0) {
    Log.d(TAG, "Trying to set the frag args to:" + argString);
    mWorkingTextView.setText("" + argString);
} else {
    Log.d(TAG, "Couldn't set frag args to: " + argString);
}

我试过的 :我试过给ViewPager托管ViewPagerFragmentPagerAdapterActivity一个static变量,我在每个fragments不断更新,我在fragment.newInstance(staticVariableInActivity)方法中包含static变量,但是这个似乎不起作用。 我也试过使用ViewPager回调viewPager.setOnPageChangeListener()我已经覆盖了onPageSelected(int pos)并尝试在那里传递片段参数,但它没有用......所以请帮助我!

我的想法 :我没有在ArrayList或任何列表中有不同的fragmentslayouts ,我只是通过newInstance()方法实例化Fragments ,具体取决于FragementPagerAdapter的位置,这可能是个问题吗? 我应该创建layouts/fragmentssingleton列表吗? 所以我可以通过singleton列表更改Fragments TextViews的值? (对不起,如果这是一个愚蠢或不可能的事情)。

注意 :我正在通过public void onSaveInstanceState(Bundle outState)保存TextViews值以处理屏幕旋转。 这可能是个问题吗?

好吧,所以我这个链接将有助于片段之间的沟通: 与其他片段的沟通

您需要定义一个Activity将实现的接口,并且片段将用于向前发送数据到活动,然后活动将按标签找到片段,执行以下操作:

frag = (Fragment2) getSupportFragmentManager()
                    .findFragmentByTag(
                            "android:switcher:" + R.id.viewPager + ":2");

然后通过调用片段中实现的公共方法来更新片段。

提供的链接将有很大帮助,它来自Android开发网站。

在适配器中添加捆绑包。

适配器的构造函数中的示例:

      public ViewPagerAdapter(Context context, FragmentManager fm) {
        super(fm);
        fragments.add(TileFragments.newInstance());
        Bundle bundleFeatures = new Bundle();
        bundleFeatures.putString(ContentName.FEATURES.toString(),ContentName.FEATURES.toString());

        fragments.get(0).setArguments(bundleFeatures);

    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM