目标:要使用 fragment 参数将字符串值从TextView传递到新的 fragment TextView,但是要在ViewPager中使用带有不同layouts/fragmentsFragmentPagerAdapter

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

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

相关代码:

我的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);
                }

            }
        });

fragment 之一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;
}

获取 fragment 参数:
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);
}

我尝试过的内容:我尝试为承载ViewPagerFragmentPagerAdapterstatic提供一个fragments变量,该变量会在我的static中的每个变量中不断更新,我在fragment.newInstance(staticVariableInActivity)方法中包括了ViewPager变量,但这不是似乎有效。
我也尝试过使用viewPager.setOnPageChangeListener()回调onPageSelected(int pos)重写了fragments并尝试在其中传递 fragment 参数,但是它没有用...所以请帮我!

我的想法:我在layouts或与此相关的任何列表中都没有不同的ArrayListFragments,我只是根据newInstance()的位置通过FragementPagerAdapter方法实例化了singleton,这可能是问题吗?我应该创建layouts/fragmentsFragments列表吗?因此,我可以通过TextViews列表更改singleton public void onSaveInstanceState(Bundle outState)的值吗? (对不起,这是愚蠢的还是不可能做的事情)。

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

最佳答案

好的,所以我这个链接将帮助 fragment 之间的通信:Communication with other Fragments

您需要定义一个接口(interface),Activity将实现该接口(interface),并且 fragment 将使用该接口(interface)将数据继续发送到该 Activity ,然后该 Activity 将通过执行以下操作的标签来找到该 fragment :

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

然后通过调用 fragment 中实现的公共(public)方法来更新 fragment 。

提供的链接将极大地帮助您,它来自Android开发网站。

10-08 03:01