Articles of android viewpager

正确插入和删除视图到浏览器

我正在用viewpager和碎片做一个adroid应用程序。 我想做一个选项来dynamic地添加或删除分页到分页器。 我有一个自定义的FragmentPagerAdapter: public class MyAdapter extends FragmentPagerAdapter implements TitleProvider{ protected final List<PageFragment> fragments; /** * @param fm * @param fragments */ public MyAdapter(FragmentManager fm, List<PageFragment> fragments) { super(fm); this.fragments = fragments; } public void addItem(PageFragment f){ fragments.add(f); notifyDataSetChanged(); } public void addItem(int pos, PageFragment f){ for(int i=0;i<fragments.size();i++){ if(i>=pos){ getSupportFragmentManager().beginTransaction().remove(getSupportFragmentManager().findFragmentByTag(getFragmentTag(i))).commit(); } } fragments.add(pos,f); notifyDataSetChanged(); pager.setAdapter(this); […]

FragmentStatePageAdapter复制ActionBar菜单项

我有一个FragmentStatePageAdapter(我用作ViewPager的适配器)和操作栏中的菜单项的问题。 当我启动应用程序,一切都很好。 如果我将任务移动到后台(例如,按HOMEbutton),我开始做些事情,直到活动结束,然后当我回到我的应用程序(通过启动器或通知我创build),一切都很好,除了有在操作栏中复制菜单项。 重要的细节是唯一重复的项目是在ViewPager中使用的每个片段的onCreateOptionsMenu()中创build的项目。 如果我用FragmentPageAdapter replaceFragmentStatePageAdapter项目不复制,但片段不显示在ViewPager(getItem()函数从适配器不会被调用,所以它不会返回任何片段)。 有任何想法吗? 一种避免FragmentStatePageAdapter复制菜单项的方法? 也许使用FragmentPageAdapter,但修改显示片段? 我的碎片修改? 这里是我的应用程序的一些代码片段… 在片段内如何创build菜单项: @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { /* Create play button */ final MenuItem mPlay = menu.add(R.string.play_all); mPlay.setIcon(R.drawable.ic_play_all); mPlay.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); mPlay.setOnMenuItemClickListener(new OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { final List<Song> songs = getSongs(); if (songs.size() == 0) { /* Show message */ […]

检测viewpager中的触摸/点击事件

我对android开发相当陌生,目前我正在使用viewpager,试图了解如何处理触摸/点按事件。 我花了整整一个上午寻找答案,我似乎无法find任何帮助我的东西。 基本上我有一个viewpager与5个片段,都使用相同的布局。 我想要做的就是能够检测静止视图上的点击/触摸(当拖动视图时,我不希望发生任何检测)。 从我收集的信息来看,ViewPager默认会拦截所有的触摸事件。 我相信这可以通过使用: myPager.requestDisallowInterceptTouchEvent(true); 起初,我涉足OnTouchListener,并试图loggingonTouch方法是否曾经被击中 – 它似乎没有。 我也看到了GestureDetector类作为这个问题的一个解决scheme,但坦率地说,我感到不知所措,我不知道我应该在这里使用哪些类/接口。 我只想在使用ViewPager时select简单的触摸/点击事件。 目前,我正在使用Android开发人员网站的animation教程代码的修改版本。 这是我在我的MainActivity.java文件中: package com.example.pbinteractive; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; public class MainActivity extends FragmentActivity { /** * The number of pages (wizard steps) to show in this demo. */ private static final int NUM_PAGES […]

CoordinatorLayout中的ViewPager覆盖API> = 21的其他视图

我正在使用Google新devise支持库中的新CoordinatorLayout 。 我有以下布局: <android.support.design.widget.CoordinatorLayout> <android.support.design.widget.AppBarLayout> <android.support.design.widget.CollapsingToolbarLayout app:layout_scrollFlags="scroll|exitUntilCollapsed"> <ImageView app:layout_collapseMode="parallax"/> <android.support.v7.widget.Toolbar /> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <LinearLayout app:layout_behavior="@string/appbar_scrolling_view_behavior" > <android.support.design.widget.TabLayout /> <android.support.v4.view.ViewPager android:id="@+id/viewPager" /> </LinearLayout> <com.getbase.floatingactionbutton.FloatingActionsMenu app:layout_anchor="@id/viewPager" app:layout_anchorGravity="bottom|right|end" android:layout_alignParentBottom="true" android:layout_alignParentEnd="true" android:layout_alignParentRight="true" > <com.getbase.floatingactionbutton.FloatingActionButton /> </com.getbase.floatingactionbutton.FloatingActionsMenu> </android.support.design.widget.CoordinatorLayout> 问题是ViewPager总是重叠在API >= 21上的FloatingActionMenu之上,有没有解决这个问题? 我试图使用view.bringToFront()来解决这个问题,但没有运气。 我也提出了Views ,但仍然没有运气。 我试过的东西: 在FABMenu移动AppBarLayout 在LinearLayout移动FABMenu 没有运气。 有没有人经历类似的事情?

setOffscreenPageLimit()如何通过保留更多的屏幕外片段来提高ViewPager的性能?

我有一个ViewPager控制五个Fragments 。 当我从索引1处的Fragment向索引0处的Fragment滑动时,我想消除animation中的短暂停顿 。 目前,我并没有调用setOffscreenPageLimit() ,所以我知道在Fragment 1处于空闲状态时, Fragment 0被ViewPager保留在内存中,因为屏幕外页面限制默认为1(任一当前Fragment一面)。 这是令人困惑的地方。 如果我在我的ViewPager上调用setOffscreenPageLimit(4) , 从1到0animation的滑动暂停就消失了 – animation是平滑的 。 因此,我总结道,在内存中保留Fragments 2-4将animation从Fragment 1改进为Fragment 0。 如何保留Fragments 2-4改善从Fragment 1到Fragment 0的滑动animation? 编辑 我运行TraceView,使用onPageScrollStateChanged(int state)来确定何时开始和停止跟踪,如下所示: @Override public void onPageScrollStateChanged(int state) { if (state == 1 && mViewPager.getCurrentItem() == 1) { Debug.startMethodTracing("ViewPagerTesting", 100000000); } if (state == 0 && mViewPager.getCurrentItem() == 0) { Debug.stopMethodTracing(); […]

'Activity重启后调用'getSupportFragmentManager()'时,'IllegalStateException:Activity已经被销毁'

我有一个父级片段活动有一个ViewPager其中包含一个孩子ViewPager。 子ViewPager包含每个页面的片段。 我使用callback接口在这些子页面片段和顶级父页面片段活动之间进行通信,例如 public interface Callbacks { public void onItemSelected(Link link); } 在父Fragment Activity中,我监听onItemSelected事件,例如 @Override public void onItemSelected(Link link) { Bundle argumentsFront = new Bundle(); argumentsFront.putParcelable(FragmentComments.ARG_ITEM_ID, link); fragmentComments = new FragmentComments(); fragmentComments.setArguments(argumentsFront); getSupportFragmentManager().beginTransaction().replace(R.id.post_container, fragmentComments).commitAllowingStateLoss(); } 现在这个工作正常,当应用程序第一次启动。 如果您打开设备更改方向,则重新启动“活动”。 所有片段重新初始化自己,因为我使用setRetainInstance(true); (我不调用setRetainInstance(true)在子ViewPager的片段,因为它不被支持)。 但是,如果我点击子ViewPager的片段中的列表项,我得到这个exception: FATAL EXCEPTION: main java.lang.IllegalStateException: Activity has been destroyed at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1342) at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595) at android.support.v4.app.BackStackRecord.commitAllowingStateLoss(BackStackRecord.java:578) 有谁知道为什么发生这种情况? […]

与选项卡和Viewpager的Android碎片

我们正在构build一个如上所示的嵌套有碎片的应用程序。 选项卡具有 – 详细信息选项卡和MAps选项卡 详细信息选项卡将有一个幻灯片 – 像查看页面滑块和下面的信息将滚动。 地图选项卡将显示地图。 我已经实现了标签和地图以及滑块,如上所示。 现在我很困惑如何添加滑块下面的内容,这将使详细信息选项卡滚动。 我试过了什么? 在CLick的Details选项卡上,Fragment将会尝试膨胀里面的两个Fragment布局。 AndroidTabLayoutActivity.java package com.mink7.abs; import com.viewpagerindicator.CirclePageIndicator; import android.app.TabActivity; import android.content.Intent; import android.os.Bundle; import android.support.v4.view.ViewPager; import android.widget.TabHost; import android.widget.TabHost.TabSpec; import java.util.Random; import android.support.v4.app.FragmentTabHost; import com.viewpagerindicator.PageIndicator; import android.support.v4.app.FragmentActivity; import android.view.Menu; import android.view.MenuItem; import android.widget.Toast; public class AndroidTabLayoutActivity extends TabActivity { /** Called when the activity is […]

在滑动抽屉项目之间滑动之后,TabLayout和ViewPager-Tabs不起作用

TabLayout和ViewPager – 在滑动抽屉项目之间滑动后,单击选项卡不起作用。 我工作的应用程序有滑动抽屉和Tablayout。 我参考本教程滑动抽屉和TabLayout 。 滑动的抽屉里面 TaskList – > TabLayout(Tabs(Today,Monthly,Yearly)) 设置 命令 我有滑动抽屉和Tablayout之间的问题。 第一次viewpager正确加载。 但是当我移动到下一个抽屉项目像(设置片段)之后,回到TaskList选项卡片段viewpager不能加载任何片段,当滑动该页面然后加载几个片段。 这里是Java代码 public class TaskListFragment extends Fragment { private Toolbar toolbar; private TabLayout tabLayout; private ViewPager viewPager; public TaskListFragment() { // Required empty public constructor } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup […]

在ViewPager和FragmentStatePagerAdapter上销毁页面

我们正在尝试创build一个基于ViewPager的Android应用程序,该应用程序在运行时接收添加和删除页面的指令。 几乎像一个标签浏览器的经验,你可以删除当前标签,或删除一个特定的选项卡。 在Google文档之后,我们使用了FragmentStatePagerAdapter,这是为了在有大量页面的情况下使用,更像是列表视图。 但是,当我们尝试: – 删除不在屏幕上的页面 – 并从同一类创build一个新的片段对象 – 并在页面的相同位置删除我们注意到,Android平台恢复死网页,并显示给用户。 我们刚刚创build的新对象不会运行“onCreate”,“onCreateView”或“onActivityCreated”。 我们正在寻找解决这个问题的方法,迫使平台使用同一个类中的新片段对象。 有任何想法吗? 我们发现,如果我们摧毁了当前页面,那么这个平台确实摧毁了这个页面,并从同一个类中创build了一个新的对象。 这是一个复制问题和这种行为的小例子。 资料来源: http : //dl.dropbox.com/u/8333012/SimpleAdapter/SimplePager.zip video: http : //www.youtube.com/watch?v = -oaXXwU8PSI& hd=1 从这个项目中,当您触摸第一页上的TextView时,它被devise为将第二页(绿色)移除到新的蓝页。 你会看到,即使从第一页这样做,第二页仍然是绿色的。 但是当你按下第二页上的返回Androidbutton(绿色)并触摸TextView时,所创build的第二页将是正确的蓝色。

如何实现碎片之间的滑动手势?

我想实现我的Android应用程序,我正在开发Android Studio的IDE。 在不同的标签(片段)之间滑动。 我尝试在网上search和StackOverflow,但我不明白。 我的操作栏是经典的,在Android 3.0以上的版本。如果你能给我一些build议或者援助的例子,我将不胜感激。 有了这个,我感谢你。