Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在ParentActivity中调用方法片段时适配器是否返回null?_Java_Android - Fatal编程技术网

Java 在ParentActivity中调用方法片段时适配器是否返回null?

Java 在ParentActivity中调用方法片段时适配器是否返回null?,java,android,Java,Android,在我的活动中,我希望从刷新数据的片段中访问一个公共方法 我在承载片段的parentActivity中称之为: @Override public void onRescanLibrary() { Fragment songsFrag = mSectionsPagerAdapter.getItem(0); ((SongsFragment)songsFrag).refreshAdapter(); Log.d(TAG,"onRescanLibrar

在我的活动中,我希望从刷新数据的片段中访问一个公共方法

我在承载片段的parentActivity中称之为:

@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
的屏幕外页面跟踪。自己跟踪
片段
实例可能更安全。“不管怎样,这就是我要做的。”米凯姆说。好的,谢谢你的建议,安全总比抱歉好,自己保存好。