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

Sak*_*boy 6 java android android-fragments android-viewpager fragmentpageradapter

目的:为了使用片段参数从一个沿字符串值传递TextView到一个新的片段TextView,但在使用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);
                }

            }
        });
Run Code Online (Sandbox Code Playgroud)

片段 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;
}
Run Code Online (Sandbox Code Playgroud)

获取片段参数:

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);
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

Sak*_*boy 3

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

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

frag = (Fragment2) getSupportFragmentManager()
                    .findFragmentByTag(
                            "android:switcher:" + R.id.viewPager + ":2");
Run Code Online (Sandbox Code Playgroud)

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

提供的链接会有很大帮助,它来自 Android Development 网站。