Search code examples
androidandroid-fragmentsandroid-viewpager

ViewPager with FragmentPagerAdapter Not showing Content


I am trying to use Fragment This is my activity class:

public class InterfaceAct extends FragmentActivity implements View.OnClickListener {
    private ViewPager mViewPager;
    private List<Fragment> datas;
    private ViewPagerFragmentAdapter viewPagerFragmentAdapter;
    private LinearLayout mLLHome,mLLTimer,mLLEdit,mLLAbout;
    private ImageView mImageViewHome,mImageViewTimer,mImageViewEdit,mImageViewAbout;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activiy_interface);
        initDatas();// Init Data For Fragments
        initView();//  Init Component
        initEvent();//  Sign for Click Listener
        viewPagerFragmentAdapter=new ViewPagerFragmentAdapter(getSupportFragmentManager(),datas);// Init Adpater Class
        mViewPager.setAdapter(viewPagerFragmentAdapter);
    }
    private void initDatas() {
        datas=new ArrayList<Fragment>();
        datas.add(new MyFragment1());
        datas.add(new MyFragment2());
        datas.add(new MyFragment3());
        datas.add(new MyFragment4());
    }
    private void initEvent() {
        mLLHome.setOnClickListener(this);
        mLLTimer.setOnClickListener(this);
        mLLEdit.setOnClickListener(this);
        mLLAbout.setOnClickListener(this);
        mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {//ViewPager Scrolling Switch Listner
            @Override
            public void onPageSelected(int arg0) {
                int currentItem=mViewPager.getCurrentItem();
                resetImag();
                switch (currentItem) {
                    case 0:
                        mImageViewHome.setImageResource(R.drawable.home_yes);
                        break;
                    case 1:
                        mImageViewTimer.setImageResource(R.drawable.timer_yes);
                        break;
                    case 2:
                        mImageViewEdit.setImageResource(R.drawable.edit_yes);
                        break;
                    case 3:
                        mImageViewAbout.setImageResource(R.drawable.about_yes);
                        break;
                    default:
                        break;
                }
            }
            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {

            }
            @Override
            public void onPageScrollStateChanged(int arg0) {

            }
        });
    }
    private void initView() {
        mViewPager = (ViewPager) findViewById(R.id.viewpager);
        mLLHome = (LinearLayout) findViewById(R.id.ll_home);
        mLLTimer = (LinearLayout) findViewById(R.id.ll_timer);
        mLLEdit = (LinearLayout) findViewById(R.id.ll_edit);
        mLLAbout = (LinearLayout) findViewById(R.id.ll_about);
        mImageViewHome = (ImageView) findViewById(R.id.img_home);
        mImageViewTimer = (ImageView) findViewById(R.id.img_timer);
        mImageViewEdit = (ImageView) findViewById(R.id.img_edit);
        mImageViewAbout = (ImageView) findViewById(R.id.img_about);
    }
    @Override
    public void onClick(View v) {
        resetImag();
        switch (v.getId()) {
            case R.id.ll_home:
                mViewPager.setCurrentItem(0);
                mImageViewHome.setImageResource(R.drawable.home_yes);
                break;
            case R.id.ll_timer:
                mViewPager.setCurrentItem(1);
                mImageViewTimer.setImageResource(R.drawable.timer_yes);
                break;
            case R.id.ll_edit:
                mViewPager.setCurrentItem(2);
                mImageViewEdit.setImageResource(R.drawable.edit_yes);
                break;
            case R.id.ll_about:
                mViewPager.setCurrentItem(3);
                mImageViewAbout.setImageResource(R.drawable.about_yes);
                break;
            default:
                break;
        }
    }
    private void resetImag() {// Reset Picture
        mImageViewHome.setImageResource(R.drawable.home_no);
        mImageViewTimer.setImageResource(R.drawable.timer_no);
        mImageViewEdit.setImageResource(R.drawable.edit_no);
        mImageViewAbout.setImageResource(R.drawable.about_no);
    }
}

The ViewPagerFragmentAdapter Looks like this:

public class ViewPagerFragmentAdapter extends FragmentStatePagerAdapter {
    private List<Fragment> datas;
    public ViewPagerFragmentAdapter(FragmentManager fm,List<Fragment> datas) {
        super(fm);
        this.datas=datas;
    }
    @Override
    public Fragment getItem(int position) {// Return View Object
        return datas.get(position);
    }
    @Override
    public int getCount() {// Return View Num
        return datas.size();
    }
    @Override
    public Object instantiateItem(ViewGroup container, int position) {// Init View
        return super.instantiateItem(container, position);
    }
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {// Destroy View
        super.destroyItem(container, position, object);
    }
}

The layout for the page, it includes a viewpager and also a menu bar in linear layout:

?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="449dp"
        android:layout_weight="1"></android.support.v4.view.ViewPager>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:background="#ffffffff"
        android:orientation="horizontal" >
        <LinearLayout
            android:id="@+id/ll_home"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="vertical" >
            <ImageView
                android:id="@+id/img_home"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:background="#0000"
                android:src="@drawable/home_yes" />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Home"
                android:textColor="#b6b3b3" />
        </LinearLayout>
        <LinearLayout
            android:id="@+id/ll_timer"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="vertical" >
            <ImageView
                android:id="@+id/img_timer"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:background="#0000"
                android:src="@drawable/timer_no" />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Timer"
                android:textColor="#b6b3b3" />
        </LinearLayout>
        <LinearLayout
            android:id="@+id/ll_edit"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="vertical" >
            <ImageView
                android:id="@+id/img_edit"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:background="#0000"
                android:src="@drawable/edit_no" />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Edit"
                android:textColor="#b6b3b3" />
        </LinearLayout>
        <LinearLayout
            android:id="@+id/ll_about"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="vertical" >
            <ImageView
                android:id="@+id/img_about"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:background="#0000"
                android:src="@drawable/about_no" />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="About"
                android:textColor="#b6b3b3" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

And This is one of the fragment:

public class MyFragment1 extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.tab1,null);
    }
}

I have four fragment prepared for viewpager(they are basiclly the same but with differnt layout), here is what the tab1 layout might look like:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical" >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="Chat"
        android:textSize="30sp" >
    </TextView>
</LinearLayout>

And I only got the menu bar when I run it, the viewpager is not set and I don't know why


Solution

  • Remove android:layout_weight="1" <Viewpager> and add android:orientation="vertical" to Linear layout

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent" 
        android:orientation="vertical"
        android:layout_height="match_parent">
    
        <android.support.v4.view.ViewPager
            android:id="@+id/viewpager"
            android:layout_width="match_parent"
            android:layout_height="449dp"
           ></android.support.v4.view.ViewPager> 
           //-----------