6

目标:使用片段参数将字符串值从 aTextView传递到新片段TextView,但是在使用 a时ViewPager与.layouts/fragmentsFragmentPagerAdapter

问题:新片段从不接收来自前一个片段的片段参数。

我的设置:我有我的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我不断更新的变量,我在方法中fragments包含了static变量fragment.newInstance(staticVariableInActivity),但这似乎不起作用。我也尝试过使用我已经覆盖的ViewPager回调并尝试在那里传递片段参数,但是它没有工作......所以请帮助我!viewPager.setOnPageChangeListener()onPageSelected(int pos)

我的想法:我没有不同的fragmentslayouts在一个ArrayList或任何列表中,我只是根据 的位置实例化方法Fragments,这可能是一个问题吗?我应该创建一个列表吗?所以我可以通过列表更改值吗?(如果那是愚蠢的或不可能的事情,请原谅我)。newInstance()FragementPagerAdaptersingletonlayouts/fragmentsFragments TextViewssingleton

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

4

2 回答 2

3

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

您需要定义一个 Activity 将实现的接口,并且 Fragment 将使用该接口将数据发送到 Activity,然后 Activity 将通过标记查找 Fragment,执行如下操作:

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

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

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

于 2013-11-19T03:13:10.430 回答
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);

    }
于 2014-05-07T15:01:26.897 回答