片段中的getView有时返回null

时间:2012-05-07 09:16:56

标签: android android-fragments

我有一个带ViewPager的应用程序,它包含两个片段:主片段和列表片段。如果选择了列表中的某些内容,则会引发一个在活动中处理的事件。活动切换到主片段并调用“setSelectedItem”方法。在这种方法中, 我使用getView()来查找特定视图,以根据所选项目更改文本。

大部分时间它都有效,但有时getView返回null,我不知道为什么。

pagerAdapter是在活动的OnCreate中创建的:

this.mPagerAdapter  = new PagerAdapter(super.getSupportFragmentManager());
ViewPager pager = (ViewPager)super.findViewById(R.id.viewpager);
pager.setAdapter(this.mPagerAdapter);

寻呼机适配器在其构造函数中创建两个片段的实例:

public PagerAdapter(FragmentManager fm) {
    super(fm);
    this.main = MainFragment.newInstance();
    this.list = ListFragment.newInstance();
}

这是活动中的方法,当选择列表中的项目时调用该方法:

ViewPager pager = (ViewPager)super.findViewById(R.id.viewpager);
pager.setCurrentItem(0, true);
((MainFragment)mPagerAdapter.getItem(0)).setSelectedItem(id);

最后,这是MainFragment中setSelectedItem方法中导致问题的行:

TextView s = (TextView)getView().findViewById(R.id.CurrentSelection);

我尝试了几件我读过的事情,但问题仍然不规律地发生。

1 个答案:

答案 0 :(得分:0)

首先,我不是百分百肯定,但我有几点需要提及。首先,我不喜欢你如何使用thissuper这样的,它们看起来很模糊,我相信更好的方法是更准确,因为预编译你知道他们的值。我认为如果你将代码改为如下,那将有所帮助(只是预感)。

// No need for 'this' and 'super' here, you are within the activity
mPagerAdapter  = new PagerAdapter(getSupportFragmentManager());
ViewPager pager = (ViewPager)findViewById(R.id.viewpager);
pager.setAdapter(mPagerAdapter);

public PagerAdapter(FragmentManager fm) {
    super(fm);
    // No need for 'this' here, you are within the class
    main = MainFragment.newInstance();
    list = ListFragment.newInstance();
}

// No need for 'super' here, you are within the activity
ViewPager pager = (ViewPager)findViewById(R.id.viewpager);
pager.setCurrentItem(0, true);
((MainFragment)mPagerAdapter.getItem(0)).setSelectedItem(id);

// Here use 'getActivity()' instead of 'getView()'
TextView s = (TextView)getActivity().findViewById(R.id.CurrentSelection);

让我知道会发生什么,干杯。