简体   繁体   English

在ViewPager Android中创建片段

[英]create fragment inside ViewPager android

MainActivity(extends fragmentActivity) has listview which calls listviewadapter within which have a ViewPager with ViewpagerAdapter now if i need to generate 5 fragments within ViewPager how to pass getFragmentManager() to adapter. MainActivity(extendedsfragmentActivity)具有listview,它调用listviewadapter,其中如果我需要在ViewPager内生成5个片段,以及如何将getFragmentManager()传递给适配器,则其中的ViewPagerAdapter现在带有ViewPager。

MainActivity [fragmentActivity] ----> Listview ----> ListviewAdapter [Custom BaseAdapterAdapter with getview of layout ViewPager] ---> ViewPager ---> ViewPageAdapter [ i need to create 5 fragments based on position? MainActivity [fragmentActivity] ----> Listview ----> ListviewAdapter [具有布局ViewPager的getview的自定义BaseAdapterAdapter] ---> ViewPager ---> ViewPageAdapter [ 我需要基于位置创建5个片段? ] ]

It will be too long if i paste the whole code so i have attached only 如果粘贴整个代码会太长,所以我只附加了

public class ViewPagerAdapter extends PagerAdapter  {    
    ArrayList<ModelClass> arrayModelClasses = new ArrayList<ModelClass>();
    Context mcontext ;
    LinearLayout layouttest;

    final int PAGE_COUNT = 5;
    private String titles[] = new String[] { "Villa ","", "" ,"","",""};

    private int[] imageResId = { R.drawable.transparant,R.drawable.ic_action_place, R.drawable.icon_3d1,
            R.drawable.icon_flooplan,R.drawable.icon_gallery,R.drawable.icon_location };

    @SuppressLint("NewApi")
    @Override
    public void finishUpdate(ViewGroup container) {
        // TODO Auto-generated method stub
        super.finishUpdate(container);
    }

    public ViewPagerAdapter(ArrayList<ModelClass> arrayModelClasses , Context context) {
        super();
        this.arrayModelClasses = arrayModelClasses;
        this.mcontext= context;
    }

    @Override
    public boolean isViewFromObject(View collection, Object object) {
        return collection == ((View) object);
    }

    View view;

    @Override
    public Object instantiateItem(View collection, int position) {
        if (position == 0) {
            //need to call fragment 1
        }if (position == 1) {
        //need to call fragment 2
        }if (position == 2) {
        //need to call fragment 3
        }if (position == 3) {
        //need to call fragment 4
        }if (position == 4) {
        //need to call fragment 5
        }   
        return view;
    }

    @Override
    public void destroyItem(View container, int position, Object object) {
        ((ViewPager) container).removeView((View) object);
    }

    @Override
    public CharSequence getPageTitle(int position) {
         Drawable image = mcontext.getResources().getDrawable(imageResId[position]);
            image.setBounds(0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight());
            SpannableString sb = new SpannableString(" " +  titles[position] );
            ImageSpan imageSpan = new ImageSpan(image, ImageSpan.ALIGN_BOTTOM);
            sb.setSpan(imageSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            return sb;
    }

    @Override
    public int getCount() {
        return PAGE_COUNT;
    }

}

link but it uses FragmentPagerAdapter for viewPager and passed the getSupportFragmentManager from FragmentActivity but its not possible with 2 adapters so help. 链接,但它对ViewPager使用FragmentPagerAdapter并从FragmentActivity传递了getSupportFragmentManager,但对于2个适配器来说不可能,因此请提供帮助。

Question: How to create fragment within viewPager which is inside listview. 问题:如何在listview内的viewPager中创建片段。 sorry if its confusing. 对不起,如果混淆。

Thanks, 谢谢,

Considering you did not post your ListView Adapter I'll assume you extend BaseAdapter (either way it'll be similar). 考虑到您没有发布ListView适配器,我假设您扩展了BaseAdapter (无论哪种方式都相似)。 On the getView(...) method instantiate a new ViewPagerAdapter and set it to the PagerAdapter defined in the list item xml. getView(...)方法上,实例化一个新的ViewPagerAdapter并将其设置为列表项xml中定义的PagerAdapter

Note: having a ViewPager inside the ListView (and specially while loading the items that way) could cause low performance. 注意:ListView内放置ViewPager (特别是在以这种方式加载项目时)可能会导致性能降低。

I've attached fragments inside ViewPager with the code as follows 我已经在ViewPager中使用以下代码附加了片段

public class IntroslideActivity extends FragmentActivity { 公共类IntroslideActivity扩展FragmentActivity {

 private static int NUM_PAGES = 5;          

    private ViewPager mPager;


    private PagerAdapter mPagerAdapter;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_introslide);



     mPager = (ViewPager) findViewById(R.id.pager);

/** * A simple pager adapter that represents 5 {@link ScreenSlidePageFragment} objects, in * sequence. / ** *一个简单的寻呼机适配器,以*顺序表示5个{@link ScreenSlidePageFragment}对象。 */ private class ScreenSlidePagerAdapter extends FragmentPagerAdapter{ * /私有类ScreenSlidePagerAdapter扩展了FragmentPagerAdapter {

     protected  final int[] ICONS = new int[] {
         R.drawable.ic_message,
         R.drawable.ic_phone,
         R.drawable.ic_message,
         R.drawable.ic_message,
         R.drawable.ic_message
 };

    public ScreenSlidePagerAdapter(android.support.v4.app.FragmentManager fm) {
        super(fm);
    }

    @Override
    public android.support.v4.app.Fragment getItem(int position) {
        android.support.v4.app.Fragment frm = null;
        System.out.println("scrolling position"+position);
        if(position==0){

            frm=ScreenSlidePageFragment.create(position);
        }
        else if(position==1){
            frm=Screenslidetwo.create(position);
        }
        else if(position==2){
            frm=Screenslidethree.create(position);
        }
        else if(position==3){
            frm=Screenslidefour.create(position);
        }
        else if(position==4){
            frm=Screenslidefive.create(position);
        }
        return frm;
    }

    @Override
    public int getCount() {
        return NUM_PAGES;
    }
    public void setCount(int count) {
        if (count > 0 && count < 5) {
            NUM_PAGES = count;
            notifyDataSetChanged();
        }
    }


}



        mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
        mPager.setAdapter(mPagerAdapter);

} } }}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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