android - 从父活动调用时,片段视图为空
问题描述
我有一个活动及其子片段LinearLayout
,我在其中生成按钮。创建片段后,一切运行正常。但是,当父活动下载一个新项目时,我调用片段中用于生成按钮并将它们添加到视图中的方法,但LinearLayout
返回 null 并且我不知道为什么。我要么需要修复它,要么找到一种方法来“重新显示”我的片段。以下是相关代码:
歌曲片段:
LinearLayout linearLayout;
DatabaseHelper databaseHelper;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_song, container, false);
linearLayout = rootView.findViewById(R.id.songFragmentMainLayout);
databaseHelper = new DatabaseHelper(getActivity());
return rootView;
}
@Override
public void onResume() {
super.onResume();
RefreshButtons();
}
public void RefreshButtons(){
linearLayout.removeAllViews(); //this line is where the NullPointerException is called
...
}
主要活动:
//refresh fragment view
SongFragment fragment = (SongFragment) sectionsPagerAdapter.getItem(0);
if(downloadQueue.size() == 0){
fragment.RefreshButtons();
Toast.makeText(context, "New songs downloaded", Toast.LENGTH_SHORT).show();
}
...
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
Fragment fragment = null;
switch (position) {
case 0:
fragment = new SongFragment();
break;
case 1:
fragment = new PlaceholderFragment();
break;
}
return fragment;
}
@Override
public int getCount() {
return 2;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "Songs";
case 1:
return "Playlists";
}
return null;
}
}
谢谢你的帮助。
解决方案
该方法fragment.RefreshButtons();
返回一个NPE,因为如果您按照SectionsPagerAdapter
应有的方式实现,则getItem()
返回该片段的新实例,该实例尚未附加到片段管理器,因此会导致Nullpointer exception
.
所以你应该做的是获取一个当前活动的片段实例,如下所示:
Fragment frag = (Fragment) mViewPager.getAdapter().instantiateItem(mViewPager, 0);
0
是您的片段的位置,例如,如果您有 3 个片段,0
将返回第一个片段实例等...
推荐阅读
- javascript - 从 div 的中心开始滚动
- html - 使用“Enter”按钮提交表单不起作用
- android - Android Studio 模拟器:进程以退出代码 -1073740791 (0xC0000409) 完成
- architecture - 使用单点登录获取用户数据的最佳方式
- javascript - 如何使用 Debounce Lodash React Native 加快搜索速度
- javascript - 如何获取存储在网站 Firebase 存储中的图像列表?
- java - javax.ws.rs.ProcessingException:找不到内容类型应用程序/x-www-form-urlencoded 类型的编写器:javax.ws.rs.core.Form$1
- android - 如何更改通知图标?
- javascript - Angular 5-如何向构造函数添加多个参数?
- javascript - 为角度控制器脚本创建单独的文件时出现“ReferenceError:未定义角度”