目标:要使用 fragment 参数将字符串值从TextView
传递到新的 fragment TextView
,但是要在ViewPager
中使用带有不同layouts/fragments
的FragmentPagerAdapter
。
问题:新 fragment 永远不会从前一个 fragment 接收 fragment 参数。
我的设置:我的Activity
托管了ViewPager
和FragmentPagerAdapter
。我已经重写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);
}
我尝试过的内容:我尝试为承载
ViewPager
和FragmentPagerAdapter
的static
提供一个fragments
变量,该变量会在我的static
中的每个变量中不断更新,我在fragment.newInstance(staticVariableInActivity)
方法中包括了ViewPager
变量,但这不是似乎有效。我也尝试过使用
viewPager.setOnPageChangeListener()
回调onPageSelected(int pos)
重写了fragments
并尝试在其中传递 fragment 参数,但是它没有用...所以请帮我!我的想法:我在
layouts
或与此相关的任何列表中都没有不同的ArrayList
和Fragments
,我只是根据newInstance()
的位置通过FragementPagerAdapter
方法实例化了singleton
,这可能是问题吗?我应该创建layouts/fragments
的Fragments
列表吗?因此,我可以通过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开发网站。