Java 在ParentActivity中调用方法片段时适配器是否返回null?
在我的活动中,我希望从刷新数据的片段中访问一个公共方法 我在承载片段的parentActivity中称之为:Java 在ParentActivity中调用方法片段时适配器是否返回null?,java,android,Java,Android,在我的活动中,我希望从刷新数据的片段中访问一个公共方法 我在承载片段的parentActivity中称之为: @Override public void onRescanLibrary() { Fragment songsFrag = mSectionsPagerAdapter.getItem(0); ((SongsFragment)songsFrag).refreshAdapter(); Log.d(TAG,"onRescanLibrar
@Override
public void onRescanLibrary() {
Fragment songsFrag = mSectionsPagerAdapter.getItem(0);
((SongsFragment)songsFrag).refreshAdapter();
Log.d(TAG,"onRescanLibrary called!");
}
但是我现在不知道为什么我的适配器(allSongsAdapter)返回null,因为在初始化适配器的地方调用了onCreateView
我想在parentActivity中调用的片段中的OnCreateView和方法
private AllSongsAdapter allSongsAdapter;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
allSongsAdapter = new AllSongsAdapter();
}
public void refreshAdapter(){
if (Main.songs.getSongs() != null) {
if (allSongsAdapter != null) {
allSongsAdapter.updateList(Main.songs.getSongs());
Log.d(TAG, "refreshAdapter called!");
}else{
Log.d(TAG,"allSongsAdapter is null!");
}
}
}
是否有可能在该片段的“onCreateView”之前调用“onRescanLibrary”?如果您像应该的那样实现了
PagerAdapter
,getItem()
将返回该片段的全新实例;一个未连接到FragmentManager
,因此未使用任何生命周期方法的。您应该在那里返回一个新实例,所以这不是问题所在。这是因为您不能使用getItem()
来获取当前活动的片段
实例。您需要跟踪您提供给ViewPager
(例如,在映射中)的实例,并从中获取当前实例。@MikeM如何使用mViewPager.getAdapter().InstanceItem来获取活动实例。这可能会导致一些问题,因为该方法执行必要的FragmentTransaction
,这取决于当前的Fragment
状态,以及您正在子类化的特定Fragment*PagerAdapter
。我没有做过任何测试,但我可以想象它至少会干扰ViewPager
的屏幕外页面跟踪。自己跟踪片段
实例可能更安全。“不管怎样,这就是我要做的。”米凯姆说。好的,谢谢你的建议,安全总比抱歉好,自己保存好。