fragments in viewpager, no view found error

前端 未结 8 1213
面向向阳花
面向向阳花 2020-12-19 09:23

I have an activity holding a fragment, in this fragment there is a button , when it is clicked, a dialog is popped out.

In this dialog, there is a Viewpager, which

8条回答
  •  失恋的感觉
    2020-12-19 10:02

    so far, we can't figure out why there is an error, but I have a way to work around this, using this tip:

    Tip: If you want a custom dialog, you can instead display an Activity as a dialog instead of using the Dialog APIs. Simply create an activity and set its theme to Theme.Holo.Dialog in the manifest element:

    Based on this tip, I don't make PagerDialog extend Dialog but from Fragment. And then put this Fragment inside an Activity , set the theme of this activity as above in AndroidManifest.xml.

    The updated code for the PagerDialog is as followed.

    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentStatePagerAdapter;
    import android.support.v4.view.ViewPager;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    
    public class PagerDialog extends Fragment {
    
    ViewPager mViewPager;
    FragmentStatePagerAdapter mAdapter;
    
    @Override
    public View onCreateView(LayoutInflater inflater,
            @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v = inflater.inflate(R.id.dialog, container, false);
        mViewPager = (ViewPager) v.findViewById(R.id.pager);
        mAdapter = new MyAdapter(getFragmentManager());
        mViewPager.setAdapter(mAdapter);
        return v;
    }
    
    private class MyAdapter extends FragmentStatePagerAdapter {
    
        public MyAdapter(FragmentManager fm) {
            super(fm);
    
        }
    
        @Override
        public Fragment getItem(int index) {
            return new DummyFragment();
        }
    
        @Override
        public int getCount() {
            return 2;
        }
    
    }
    
    private class DummyFragment extends Fragment {
        @Override
        public View onCreateView(LayoutInflater inflater,
                @Nullable ViewGroup container,
                @Nullable Bundle savedInstanceState) {
    
            View v = inflater.inflate(R.layout.fragment_dummy_layout,
                    container, false);
            return v;
        }
    }
    }
    

    If you have any better solutions or you can find out why the original code in my question does not work, please teach me. I am a newbie in Android programing and I am happy to learn from you all.

    Cheers.

提交回复
热议问题