简体   繁体   中英

Why is ViewPager inside my Fragment not working?

I am trying to create a fragment that would have a ViewPager. When the said fragment is called and committed, it only displays the first image and it is not swipable. Any thoughts how to achieve this?

Here is the Fragment

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class HowToFragment extends Fragment {

    private ViewPager mViewPager;
    private MyAdapter mAdapter;
    private int[] image_id = {R.drawable.image_1, R.drawable.image_2, R.drawable.image_3};

    private static int image_pos = 0;

    public static Fragment newInstance(int pos){
        image_pos = pos;
        return new HowToFragment();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_how_to_image, container, false);
        v.setBackgroundResource(image_id[image_pos]);
        return v;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) { 
        super.onActivityCreated(savedInstanceState);

        mViewPager = new ViewPager(getActivity());
        mViewPager.setId(R.id.viewPager_howto);
        FragmentManager fm = getFragmentManager();
        mAdapter = new MyAdapter(fm);
        new setAdapterTask().execute();

    }

    private class setAdapterTask extends AsyncTask<Void,Void,Void>{
          protected Void doInBackground(Void... params) {
                return null;
            }

            @Override
            protected void onPostExecute(Void result) {
                       mViewPager.setAdapter(mAdapter);
            }
    }

    private class MyAdapter extends FragmentStatePagerAdapter{

        public MyAdapter(FragmentManager fm) {
            super(fm);
            // TODO Auto-generated constructor stub
        }

        @Override
        public int getCount() {
            return image_id.length;

        }
        @Override
        public Fragment getItem(int position) {
             return HowToFragment.newInstance(position);
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            // TODO Auto-generated method stub
            FragmentManager manager = getFragmentManager();
            FragmentTransaction ft = manager.beginTransaction();
            ft.remove((Fragment) object);
            ft.commit();

            super.destroyItem(container, position, object);
        }


    }
}

I doubt you are trying to run this app in Android version less than Honeycomb. What you are trying to achieve is nested fragments. Nested fragment support is available only since jellybean 4.2

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM