简体   繁体   中英

How to replace a fragment with a viewpager fragment

I have a set of buttons on the left hand side Fragment Activity . Also i have created a two fragments, webview and ViewPagerFragment with 3 ImageFragments . The Question is when i try to replace webview with Viewpager i can no more swipe only 1 ImageFragment get shown. I can no more swipe across them .

Here is my ImageFragment

public class ImageFragment extends Fragment {
private int imageResourceId;
OnClickListener listener;
public MyAdapter mAdapter;
public ViewPager mPager;
public ImageFragment(){

}

public static Fragment newInstance() {
    // TODO Auto-generated method stub
    ImageFragment mg = new ImageFragment();
    return mg;
}


public ImageFragment(int imageResourceId) {
    this.imageResourceId = imageResourceId;
}


public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.e("Test", "ImageFragment");

}


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

}


public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.image_layout, container, false);
    View view2 = inflater.inflate(R.layout.pagerview,null);

    mPager = (ViewPager) view.findViewById(R.id.pager);
    Log.d("ImageFragment","mPager = "+mPager.toString());
    mAdapter = new MyAdapterDummy().new MyAdapter(getFragmentManager());
    new setAdapterTask().execute();


    ImageView imageView1 = (ImageView) view.findViewById(R.id.imageView1);
    ImageView imageView2 = (ImageView) view.findViewById(R.id.imageView2);
    ImageView imageView3 = (ImageView) view.findViewById(R.id.imageView3);
    ImageView imageView4 = (ImageView) view.findViewById(R.id.imageView4);
    ImageView imageView5 = (ImageView) view.findViewById(R.id.imageView5);
    ImageView imageView6 = (ImageView) view.findViewById(R.id.imageView6);



    imageView1.setImageResource(imageResourceId);
    imageView2.setImageResource(imageResourceId);
    imageView3.setImageResource(imageResourceId);
    imageView4.setImageResource(imageResourceId);
    imageView5.setImageResource(imageResourceId);
    imageView6.setImageResource(imageResourceId);



    return view;
}

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

        protected void onPostExecute(Void result) {
                   mPager.setAdapter(mAdapter);

        }
}

And Here is the Adapter

public class MyAdapterDummy extends FragmentActivity {
static String TAG = "ViewPagerExample";
MyAdapter mAdapter;
ViewPager mPager;
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    FragmentManager mgr = getSupportFragmentManager();

}

public class MyAdapter extends FragmentPagerAdapter {

    public MyAdapter(FragmentManager fm) {

        super(fm);
    }

    public int getCount() {
        return 3;
    }

    public Fragment getItem(int position) {
        Log.d(TAG, "Item Position : " + position);
        switch (position) {
        case 0:
            return new ImageFragment(R.drawable.ic_launcher);
        case 1:
            return new ImageFragment(R.drawable.ic_launcher);
        case 2:
            return new ImageFragment(R.drawable.ic_launcher);

        default:
            return null;

        }
    }

    @Override
    public CharSequence getPageTitle(int position) {
        String str = "Top Listings";
        return str;
    }



}

}

Any help would be appreciated.

Thank You

I solved this.....

You have to convert your ViewPager also into a Fragment. I know its a ViewGroup but still. Then u can use the standard replace method of transactions in you onclick to replace a fragment.

Here is the code with changes.

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    l.setItemChecked(position, true);
    Fragment df = DetailsFragment.newInstance();
    Fragment page = FragmentPagerAdapterClass.newInstance();

    if (listener != null) {
        if (position == 0) {
            Log.d(TAG, "Position = " + position);


            getFragmentManager().beginTransaction().remove(DetailsFragment.newInstance());
            getFragmentManager().beginTransaction()
            .replace(R.id.layout_detail, FragmentPagerAdapterClass.newInstance()).commit();
            getFragmentManager().executePendingTransactions();

        } else {
            Log.d(TAG, "Position = " + position);

            McDonalds c = EU.get(position);
            String url = getString(c.url);

            new DetailsFragment().setUrl(url);

               getFragmentManager().beginTransaction().remove(FragmentPagerAdapterClass.newInstance());
            getFragmentManager().beginTransaction()
                .replace(R.id.layout_detail, DetailsFragment.newInstance()).commit();
            getFragmentManager().executePendingTransactions();

            // listener.onCountrySelected(EU.get(position));
        }
    }
}

Anyway .... thanx for all you support :)

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