如何在 ViewPager 中使用 Fragments

Posted

技术标签:

【中文标题】如何在 ViewPager 中使用 Fragments【英文标题】:How to use Fragments inside a ViewPager 【发布时间】:2015-07-17 01:31:14 【问题描述】:

我在我的 MainActivity 中使用 ViewPager 和三个不同的视图,我想在其中一个视图中显示 ExpandableListView 但我无法得到它。有人可以告诉我如何解决吗?我将不胜感激。

这是我的 FragmentPagerAdapter:

public class PagerAdapterJulio extends FragmentPagerAdapter 

    public PagerAdapterJulio(FragmentManager fm) 
        super(fm);
    

    @Override
    public Fragment getItem(int i) 
        switch (i) 
            case 0:
                return new HomeActivity.DummySectionFragment();
            case 1:
                return new HomeActivity.DummySectionFragment();
            case 2:
                return new HomeActivity.DummySectionFragment();
            default:
                return null;
        
    

    public int getCount() 
        return 3;
    

    @Override
    public CharSequence getPageTitle(int position) 
        return "Section " + (position + 1);
    

这是我的 BaseExpandableListAdapter:

public class MyExpandableAdapter extends BaseExpandableListAdapter 

    private Activity activity;
    private ArrayList<Object> childtems;
    private LayoutInflater inflater;
    private ArrayList<String> parentItems, child;
    private Context ctx;

    public MyExpandableAdapter(ArrayList<String> parents, ArrayList<Object> childern) 
        this.parentItems = parents;
        this.childtems = childern;
    

    public void setInflater(LayoutInflater inflater, Activity activity) 
        this.inflater = inflater;
        this.activity = activity;
    

    @Override
    public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) 

        child = (ArrayList<String>) childtems.get(groupPosition);

        TextView textView = null;

        if (convertView == null) 
            convertView = inflater.inflate(R.layout.group, null);
        

        textView = (TextView) convertView.findViewById(R.id.textView1);
        textView.setText(child.get(childPosition));

        convertView.setOnClickListener(new OnClickListener() 

            @Override
            public void onClick(View view) 
                Toast.makeText(activity, child.get(childPosition)+" holaaa",
                        Toast.LENGTH_SHORT).show();
            
        );

        return convertView;
    

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) 

        if (convertView == null) 
            convertView = inflater.inflate(R.layout.row, null);
        

        ((CheckedTextView) convertView).setText(parentItems.get(groupPosition));
        ((CheckedTextView) convertView).setChecked(isExpanded);


        return convertView;
    

    @Override
    public Object getChild(int groupPosition, int childPosition) 
        return null;
    

    @Override
    public long getChildId(int groupPosition, int childPosition) 
        return 0;
    

    @Override
    public int getChildrenCount(int groupPosition) 
        return ((ArrayList<String>) childtems.get(groupPosition)).size();
    

    @Override
    public Object getGroup(int groupPosition) 
        return null;
    

    @Override
    public int getGroupCount() 
        return parentItems.size();
    

    @Override
    public void onGroupCollapsed(int groupPosition) 
        super.onGroupCollapsed(groupPosition);
    

    @Override
    public void onGroupExpanded(int groupPosition) 
        super.onGroupExpanded(groupPosition);
    

    @Override
    public long getGroupId(int groupPosition) 
        return 0;
    

    @Override
    public boolean hasStableIds() 
        return false;
    

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) 
        return false;
    



这里是MainActivty的onCreate方法的部分代码:

        final ActionBar actionBar = getActionBar();
        actionBar.setHomeButtonEnabled(false);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        mViewPager = (ViewPager) findViewById(R.id.pager);
        mAdap = new PagerAdapterJulio(getSupportFragmentManager());
        mViewPager.setAdapter(mAdap);
//        mViewPager.setAdapter(mAppSectionsPagerAdapter);
        mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() 
            @Override
            public void onPageSelected(int position) 
                actionBar.setSelectedNavigationItem(position);
            
        );

        for (int i = 0; i < mAdap.getCount(); i++) 
            actionBar.addTab(
                    actionBar.newTab()
                            .setText(mAdap.getPageTitle(i))
                            .setTabListener(this));
        

【问题讨论】:

【参考方案1】:

使用您的列表视图创建一个新的 Fragment 子类,并在您的 FragmentPagerAdapter 中返回该子类的一个实例。

【讨论】:

以上是关于如何在 ViewPager 中使用 Fragments的主要内容,如果未能解决你的问题,请参考以下文章

如何防止创建相同片段的 2 个实例?

Fragment嵌套ViewPager切换后数据消失ViewPager空白问题

Android——Fragment实例精讲——底部导航栏+ViewPager滑动切换页面

Android 开发学习

如何使用导航抽屉和viewpager/viewpager2在java中制作android应用程序

如何在 ViewPager 中使用 cursorLoader?