2012-03-24 107 views
6

我有五个活动/屏幕,我希望能够在两者之间滑动,每个都有不同的功能,但是相互关联,因此每个滑动界面的UI概念都相互关联。安卓PagerView活动之间

我发现了围绕ViewPager和PagerAdapters等的许多讨论,但似乎无法找到在不同活动屏幕之间滑动切换的地方。

这甚至可能吗?有人可以通过源代码指向这个示例项目吗?或者告诉我如何改编现有的教程来做我想做的事情?

非常感谢,有一个很好的!

+0

我不能为您指出与活动的例子。如果您愿意,我可以提供使用兼容包操作栏选项卡和碎片与ViewPager的应用程序的代码示例。基本上,每个选项卡都是一个片段,托管在一个主要活动中(尽管我的应用正在稳步增长其他任务的其他活动)。但是你必须愿意使用碎片,而不是活动。感兴趣吗? – Davek804 2012-03-24 04:48:29

回答

26

您不能使用ViewPagerActivities之间滑动。您需要将5个Activities中的每一个转换为Fragments,然后将一个FragmentActivity中的所有内容与您使用的Adapter合并为ViewPager

Here's a link详细信息将转换您当前的Activities信息Fragments

这是Android Developers网站上的Fragment topic,它有很多有用的信息。

Here's another example(完整源代码)在每个页面上都会膨胀TextViews

下面是我输入了一个例子:

PagerAdapter

public class PagerAdapter extends FragmentPagerAdapter { 

    private final List<Fragment> mFragments = new ArrayList<Fragment>(); 

    public PagerAdapter(FragmentManager manager) { 
     super(manager); 
    } 

    public void addFragment(Fragment fragment) { 
     mFragments.add(fragment); 
     notifyDataSetChanged(); 
    } 

    @Override 
    public int getCount() { 
     return mFragments.size(); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return mFragments.get(position); 
    } 
} 

这一点应在onCreate称为你FragmentActivity

private void initPaging() { 

    FragmentOne fragmentOne = new FragmentOne(); 
    FragmentTwo fragmentTwo= new FragmentTwo(); 

    PagerAdapter pagerAdapter = new PagerAdapter(getSupportFragmentManager()); 
    pagerAdapter.addFragment(fragmentOne); 
    pagerAdapter.addFragment(fragmentTwo); 

    ViewPager viewPager = (ViewPager) findViewById(R.id.viewPager); 
    viewPager.setAdapter(pagerAdapter); 
} 

这是一个y的例子ou'd使用您的FragmnetActivity

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

<android.support.v4.view.ViewPager 
    android:id="@+id/viewPager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

</LinearLayout> 

要创建Fragment创建扩展Fragment一个新的类。前两种方法,你想要overrideonActivityCreatedonCreateView

这里是你如何能做到这一点:

public class FragmentOne extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View view = inflater.inflate(THE_LAYOUT_FROM_YOUR_ORIGINAL_ACTIVITY, container, false); 
    return view; 
    } 
} 
+0

通过google找到了这个;设置适配器时出现错误:“this.mPagerAdapter”。 “mPagerAdapter无法解析或不是字段”。这是我唯一的错误。 mPagerAdapter在PagerAdapter中工作。不知道如何解决它。如果我删除“这个”。我得到一个警告,说明initialisePaging()不在本地使用。感谢来自这些人的任何帮助 – 2012-11-10 19:48:30

+0

我有一个问题,Aneal,如何从FragmentOne向此适配器添加新的片段?因为我有这种片段“排序的主屏幕”,如果我点击那里的东西,那么它会带我到其他屏幕,在这种情况下,另一个片段,等等......我如何实现这一目标? – ely87 2012-12-18 16:00:23

+0

getItem(int position)被调用两次,从而给indexOutOfBound异常... – 2014-09-08 10:55:42

2

修为mPageradapter

PagerAdapter pagerAdapter = new PagerAdapter(getSupportFragmentManager()); 
    pagerAdapter.addFragment(fragmentOne); 
    pagerAdapter.addFragment(fragmentEvents); 

    viewPager = (ViewPager) super.findViewById(R.id.pager); 
    viewPager.setAdapter(pagerAdapter); 
+0

doenst为我工作得到了一个空指针例外! – JavaNullPointer 2013-06-21 15:14:52

+0

getItem(int position)被调用两次,因此给出indexOutOfBound异常 – 2014-09-08 10:55:58