销毁和重建FragmentPagerAdapter

时间:2015-08-19 03:10:34

标签: android android-fragments

我有一个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仍然显示字符串的旧值。

有人知道发生了什么吗?

2 个答案:

答案 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

之前