【问题标题】:create fragment inside ViewPager android在 ViewPager android 中创建片段
【发布时间】:2015-03-27 12:37:14
【问题描述】:

MainActivity(extends fragmentActivity) 具有调用 listviewadapter 的 listview,如果我需要在 ViewPager 中生成 5 个片段,则现在在其中有一个带有 ViewpagerAdapter 的 ViewPager 如何将 getFragmentManager() 传递给适配器。

MainActivity [fragmentActivity] ----> Listview ----> ListviewAdapter[Custom BaseAdapterAdapter with getview of layout ViewPager] - --> ViewPager ---> ViewPageAdapter[我需要根据位置创建5个片段?]

如果我粘贴整个代码会太长,所以我只附加了

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 但它使用 FragmentPagerAdapter 作为 viewPager 并从 FragmentActivity 传递了 getSupportFragmentManager 但它不可能使用 2 个适配器所以帮助。

问题:如何在 listview 中的 viewPager 中创建片段。很抱歉,如果它令人困惑。

谢谢,

【问题讨论】:

  • 如果你需要基于位置创建,那么你需要维护一个特定位置的片段数组列表

标签: android listview android-fragments android-viewpager


【解决方案1】:

考虑到您没有发布您的ListView 适配器,我假设您扩展了BaseAdapter(无论哪种方式都相似)。在getView(...) 方法上实例化一个新的ViewPagerAdapter 并将其设置为在列表项xml 中定义的PagerAdapter

注意:ListView 中包含ViewPager(特别是在以这种方式加载项目时)可能会导致性能下降。

【讨论】:

  • 是的,我已经完成了,但是如何在 ViewPagerAdapter 中传递 getFramentManager() 来实例化片段?
  • 哦。您可以创建一个局部变量,当您实例化它时将在 ListView 适配器上设置它,然后在实例化它们后将其传递给 ViewPagerAdapter。看起来像adapter = new MyListViewAdapter(fragmentManager);,然后是 ViewPagerAdapter。 @安妮莎
  • 但是什么类型的变量将用于在 listviewadatper 中保存 getSupportFragmentManager() 而不将其扩展到 fragmentadatper。
  • 已解决,但我还有新问题...如果您能解决,请调查一下http://stackoverflow.com/questions/29315705/listview-viewpager-doesnt-set-fragment-android
【解决方案2】:

我在 ViewPager 中附加了片段,代码如下

公共类 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);

/** * 一个简单的分页适配器,代表 5 个 {@link ScreenSlidePageFragment} 对象,在 * 顺序。 */ 私有类 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);

} }

【讨论】:

  • 抱歉@karthika 这无济于事,我想将 getSupportFragmentManager() 从 listview[baseadapter] 适配器传递到 viewpageradapter[PagerAdapter]。您的示例显示在 fragmentActivity 中调用 viewpagerAdapter。
猜你喜欢
  • 1970-01-01
  • 2020-12-27
  • 2017-09-03
  • 1970-01-01
  • 1970-01-01
  • 2016-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多