如何在 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的主要内容,如果未能解决你的问题,请参考以下文章
Fragment嵌套ViewPager切换后数据消失ViewPager空白问题
Android——Fragment实例精讲——底部导航栏+ViewPager滑动切换页面