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

时间:2013-11-15 06:45:04

标签: java android android-fragments android-viewpager fragmentpageradapter

目标:使用片段参数将字符串值从TextView传递到新片段TextView,但使用不同的ViewPagerlayouts/fragments中的FragmentPagerAdapter

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

我的设置:我的Activity主持ViewPagerFragmentPagerAdapter。我已覆盖FragmentPagerAdapters getItem(int position)方法,以根据fragment的当前位置创建新的ViewPager实例。现在我的适配器中只有两个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);
}

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

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

注意:我正在通过singleton保存TextViews值来处理屏幕旋转。这可能是个问题吗?

2 个答案:

答案 0 :(得分:3)

好的,所以我这个链接将有助于片段之间的沟通:Communication with other Fragments

您需要定义一个Activity将实现的接口,并且片段将用于将数据向前发送到活动,然后活动将通过标记找到片段,如下所示:

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

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

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

答案 1 :(得分:2)

在适配器中添加捆绑包。

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

      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);

    }