6

我有一个带有 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);

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

4

1 回答 1

0

首先,我不是 100% 确定,但我有几点需要提及。首先,我不喜欢您的使用方式this,并且super喜欢那样,它们似乎含糊不清,我认为考虑到预编译您知道它们的值,更好的方法是更准确。我认为如果您将代码更改为以下内容,它会有所帮助(只是预感)。

// 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);

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

于 2013-06-24T16:31:49.933 回答