目的: 使用片段参数将
TextView
中的字符串传递到新的片段 TextView
,但同时使用具有不同 layouts/fragments
的 FragmentPagerAdapter
的 ViewPager
。
问题: 新片段从未收到来自先前片段的片段参数。
我的设置: 我的 Activity
托管着 ViewPager
和 FragmentPagerAdapter
。我重写了 FragmentPagerAdapter
的 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
和FragmentPagerAdapter
的Activity
一个静态变量,并在每个fragment
中不断更新它,我在fragment.newInstance(staticVariableInActivity)
方法中包含了这个静态变量,但是这似乎行不通。我还尝试使用ViewPager
回调viewPager.setOnPageChangeListener()
,我重写了onPageSelected(int pos)
并试图在那里传递fragment参数,然而它没有起作用...所以请帮帮我吧!
我的想法: 我没有将不同的fragments
和layouts
放在ArrayList
或任何列表中,我只是根据FragementPagerAdapter
的位置通过newInstance()
方法实例化Fragments
,这可能有问题吗?我应该创建一个singleton
列表来存储layouts/fragments
吗?这样我就可以通过singleton
列表更改Fragments
的TextViews
的值了吗?(如果这是一个愚蠢的或不可能的事情,请原谅我)。
注意: 我正在通过public void onSaveInstanceState(Bundle outState)
保存TextViews
的值以处理屏幕旋转。这可能会有问题吗?