java - 当 ViewPager 到达第 4 页时,我想让一个按钮可见,但我得到空指针异常
问题描述
我偶然发现的一件事是,当我将代码放在 postDelayed 处理程序中时,它可以正常工作。如果没有 postDelayed 处理程序,我怎样才能使它工作?
public class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
public ScreenSlidePagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
final SlideFragment fragment = new SlideFragment();
if (position == 3){
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
fragment.btnStart.setVisibility(View.VISIBLE);
}
},0);
}
return fragment;
}
@Override
public int getCount() {
return NUM_PAGES;
}
}
解决方案
问题是您的视图可能无法按时创建,以便您调用它们的 setVisibility。理想情况下,您会在创建片段时传递一个参数,并从它们对片段进行操作。
if (position == 3){
final SlideFragment fragment = new SlideFragment();
Bundle bundle = new Bundle();
bundle.putBoolean("BUTTON_VISIBILITY", true);
fragment.setArguments(bundle);
}
然后在你的片段中:
public View onCreateView(LayoutInflater inflater,
ViewGroup containerObject,
Bundle savedInstanceState){
//here is your arguments
Bundle bundle= getArguments();
View view = inflater.inflate(R.layout.your_fragment_layout, container, false);
btnStart = view.findViewById(R.id.id_of_your_button);
if(bundle!=null){
if(bundle.getBoolean("BUTTON_VISIBILITY", false)){
btnStart.setVisibility(View.VISIBLE);
}
}
return view;
}
编辑
您可以使用 onViewCreated 来确保所有内容都已创建:
public View onCreateView(LayoutInflater inflater, ViewGroup containerObject, Bundle savedInstanceState){
return inflater.inflate(R.layout.your_fragment_layout, container, false);
}
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Bundle bundle= getArguments();
btnStart = view.findViewById(R.id.id_of_your_button);
if(bundle!=null){
if(bundle.getBoolean("BUTTON_VISIBILITY", false)){
btnStart.setVisibility(View.VISIBLE);
}
}
}
推荐阅读
- extjs - ExtJs Combobox 有值但显示为空
- python - 这行代码的 -n 指的是什么?
- python - KERAS 分类仅使用 Mnist 数据集上的一些数字
- android - Kotlin 的启动是在主线程还是后台线程中启动协程?
- python - Python:将列表中的元素写入不带括号或引号的CSV文件
- php - 在多维数组php的未知深度替换索引值
- r - 导出包含多个工作表的多个 Excel 文件中的数据框列表
- angular - 数组中的角度变化检测:IterableDiffers 与更改数组引用?
- amazon-web-services - 如何使用 Postman 工具中的 AWS REST API 调用从 AWS CodeCommit 获取存储库列表?
- ecmascript-6 - ES6:如何使用映射过滤状态数组