Jan*_*nen 6 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);
Run Code Online (Sandbox Code Playgroud)
寻呼机适配器在其构造函数中创建两个片段的实例:
public PagerAdapter(FragmentManager fm) {
super(fm);
this.main = MainFragment.newInstance();
this.list = ListFragment.newInstance();
}
Run Code Online (Sandbox Code Playgroud)
这是活动中的方法,当选择列表中的项时调用该方法:
ViewPager pager = (ViewPager)super.findViewById(R.id.viewpager);
pager.setCurrentItem(0, true);
((MainFragment)mPagerAdapter.getItem(0)).setSelectedItem(id);
Run Code Online (Sandbox Code Playgroud)
最后,这是MainFragment中setSelectedItem方法中导致问题的行:
TextView s = (TextView)getView().findViewById(R.id.CurrentSelection);
Run Code Online (Sandbox Code Playgroud)
我尝试了几件我读过的东西,但问题仍然不规律地发生.
首先,我不是 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);
Run Code Online (Sandbox Code Playgroud)
public PagerAdapter(FragmentManager fm) {
super(fm);
// No need for 'this' here, you are within the class
main = MainFragment.newInstance();
list = ListFragment.newInstance();
}
Run Code Online (Sandbox Code Playgroud)
// 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);
Run Code Online (Sandbox Code Playgroud)
// Here use 'getActivity()' instead of 'getView()'
TextView s = (TextView)getActivity().findViewById(R.id.CurrentSelection);
Run Code Online (Sandbox Code Playgroud)
让我知道发生了什么,欢呼。
归档时间: |
|
查看次数: |
2023 次 |
最近记录: |