目标:使用片段参数将字符串值从TextView
传递到新片段TextView
,但使用不同的ViewPager
时layouts/fragments
中的FragmentPagerAdapter
。
问题:新片段永远不会从前一个片段接收片段参数。
我的设置:我的Activity
主持ViewPager
和FragmentPagerAdapter
。我已覆盖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
ViewPager
和FragmentPagerAdapter
static
变量的fragments
在static
的每一个中不断更新,我在fragment.newInstance(staticVariableInActivity)
方法中包含ViewPager
变量,但这似乎不起作用。
我也尝试使用viewPager.setOnPageChangeListener()
回调onPageSelected(int pos)
我已经覆盖了fragments
并试图在那里传递片段参数,但它没有用......所以请帮帮我!!!
我的想法:我在layouts
或任何列表中没有不同的ArrayList
和Fragments
,我只是实例化{{ 1}}通过newInstance()
方法取决于FragementPagerAdapter
的位置,这可能是个问题吗?我应该创建singleton
的{{1}}列表吗?我可以通过layouts/fragments
列表更改Fragments
TextViews
的值吗? (对不起,如果这是一个愚蠢或不可能的事情)。
注意:我正在通过singleton
保存TextViews值来处理屏幕旋转。这可能是个问题吗?
答案 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);
}