我有一个FragmentPagerAdapter,显示可变数量的片段。其中每个Fragment的onCreateView方法看起来像:
public void onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
if (container == null)
return null;
View v = inflater.inflate(R.layout.my_fragment, container, false);
TextView tv = (TextView)v.findViewById(R.id.my_text_view);
Log.d(TAG, "Setting TextView text to: " + someString);
tv.setText(someString); // Where someString is some global that will change later.
}
接下来,我将someString更改为某个新值。 然后我重建了FragmentPagerAdapter。我的目的是摧毁旧的并重新开始:
mMyFragmentPagerAdapter = new MyFragmentPagerAdapter(...);
mMyViewPager.setAdapter(mMyFragmentPagerAdapter);
我在Fragment中的调试语句按预期显示字符串的新值,但TextView仍然显示字符串的旧值。
有人知道发生了什么吗?
答案 0 :(得分:1)
修正了它!
我的TextView实际上是一个EditText,所以我开始搜索为什么EditText可能无法刷新,而StackOverflow又来了救援:
EditText Settext not working with Fragment
原来,EditText在Fragment的onCreateView方法中刷新了一个问题。所以我将我的代码移出onCreateView并进入onStart,它工作正常!
我很想知道为什么EditText无法在onCreateView中刷新。那只是眩晕。
答案 1 :(得分:0)
这可能是因为您使用常规FragmentManager
。尝试转发MyFragmentPagerAdapter
ChildFragmentManager
实例的构造函数。
mMyFragmentPagerAdapter = new MyFragmentPagerAdapter(getChildFragmentManager());
修改强>:
如果您使用FragmentActivity
尝试添加:
viewPager.removeAllViews();
viewPager.setAdapter(null);
在设置新Adapter
。