java - 我想让 ViewPager 到达第 4 页时可见按钮,但出现空指针异常

标签 java android android-layout android-fragments android-viewpager

我偶然发现的一件事是,当我将代码放入 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;
    }

}

最佳答案

问题是您的 View 可能无法按时创建,以便您调用它们的 setVisibility 。理想情况下,您会在创建 fragment 时传递一个参数,并从中对 fragment 进行操作。

if (position == 3){
    final SlideFragment fragment = new SlideFragment();
    Bundle bundle = new Bundle();
    bundle.putBoolean("BUTTON_VISIBILITY", true);
    fragment.setArguments(bundle);
}

然后在你的 fragment 中:

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);
               } 
            }
    }

关于java - 我想让 ViewPager 到达第 4 页时可见按钮,但出现空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50876616/

相关文章:

java - 是否已经有适用于 Java/Android 的 OAuth2 库?

android - 如何在 LG 智能电视上安装 Android 应用程序?

android - 需要按钮根据屏幕宽度动态展开

android - 如何将 ImageView 与 ListView 中的一些文本结合起来

android - 可滚动的 ListView 和一个 TextView

java - 在导出时提供 System.loadLibrary 的 DLL 路径

java - 选择具有特定属性的实体时出现 ClassCastException

java - 如何更改 "panel.add(new JLabel(""));"中 JLabel 的字体大小

java - IllegalStateException 和 NullPointer 异常

android - gradle android studio 2.3 : failed to resolve 'com.google.code.gson:gson:2.8.0'