Articles of android viewpager

FragmentStatePageAdapter复制ActionBar菜单项

我有FragmentStatePageAdapter(我用作ViewPager的适配器)和操作栏中的菜单项的问题。 当我启动应用程序时,一切都很好。 如果我将任务移动到后台(例如,按下HOME按钮),我开始做东西,直到活动结束,然后当我回到我的应用程序(通过启动器或我创建的通知)一切都很好,除了有操作栏中的重复菜单项。 一个重要的细节是,唯一重复的项是在我在ViewPager中使用的每个片段的onCreateOptionsMenu()中创建的项。 如果我用FragmentPageAdapter替换FragmentStatePageAdapter,则不再复制项目,但是ViewPager中没有显示片段(从不调用适配器的getItem()函数,因此它不会返回任何片段)。 有任何想法吗? 一种避免FragmentStatePageAdapter复制菜单项的方法? 也许使用FragmentPageAdapter,但有一个修改来显示片段? 我片段的修改? 以下是我的应用程序中的一些代码片段… 如何在片段内创建菜单项: @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 songs = getSongs(); if (songs.size() == 0) { /* Show message */ Toast.makeText(mContext, […]

‘IllegalStateException:在活动重启后调用’getSupportFragmentManager()’时,活动已被销毁

我有一个父片段活动,其中包含一个包含子ViewPager的ViewPager。 子ViewPager包含每个页面的片段。 我使用回调接口在这些子页面片段和顶级父片段活动之间进行通信,例如 public interface Callbacks { public void onItemSelected(Link link); } 在父片段活动中,我监听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(); } 现在,当应用程序首次启动时,此function正常。 如果您转动设备以更改方向,则活动将重新启动。 当我使用setRetainInstance(true);所有片段都会重新初始化setRetainInstance(true); (我不会在子ViewPager的页面片段中调用setRetainInstance(true),因为它不受支持)。 但是,如果我单击子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) 有谁知道为什么会这样? 谢谢

Android ViewPager与视差背景图像

我想在具有视图寻呼机的活动中制作背景图像的视差滚动效果,图像应根据ViewPager滑动/滑动滚动。 我已经尝试使用https://github.com/andraskindler/parallaxviewpager它不工作它显示空白背景而不是显示图像。 这个gif描述了我的要求: 请帮帮我

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

我有一个ViewPager控制五个Fragments 。 当我从索引1处的Fragment滑动到索引0处的Fragment时,我想要消除animation中的短暂停顿 。 目前,我没有调用setOffscreenPageLimit() ,所以我知道ViewPager在Fragment 1处于空闲状态时Fragment 0被保存在内存中,因为屏幕外页面限制默认为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(); } […]

BottomSheetDialogFragment中的ViewPager

我正在尝试在BottomSheetDialogFragment中设置一个viewpager,但总是使用相同的结果: java.lang.IllegalStateException:Fragment没有视图 setupDialog 码: @Override public void setupDialog(Dialog dialog, int style) { Log.d(TAG, “setupDialog”); super.setupDialog(dialog, style); View root = View.inflate(getContext(), R.layout.fragment_daily_detail, null); dialog.setContentView(root); CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) ((View) root.getParent()).getLayoutParams(); CoordinatorLayout.Behavior behavior = layoutParams.getBehavior(); if (behavior != null && behavior instanceof BottomSheetBehavior) { bottomSheetBehavior = (BottomSheetBehavior) behavior; bottomSheetBehavior.setBottomSheetCallback(mBottomSheetBehaviorCallback); bottomSheetBehavior.setPeekHeight((int) getResources().getDimension(R.dimen.fragment_forgot_password_min_height)); Log.d(TAG, “State: ” + bottomSheetBehavior.getState()); imageClose […]

带有标签和Viewpager的Android碎片

我们正在构建如上所示的具有Fragments嵌套的App。 选项卡特征 – 详细信息选项卡和MAps选项卡 详细信息选项卡将有一个幻灯片显示 – 如下面的视图页面滑块和可滚动的信息。 地图选项卡将显示地图。 我已经实现了标签和地图以及Slider,如上所示。 现在我很困惑如何在Slider下添加内容,这将使Details Tab可滚动。 我试过了什么? 在CLicking the 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 […]

滑动菜单锁定上部视图上的触摸事件

我正在尝试在我的应用程序中使用滑动菜单 。 在我的索尼Xperia S上它工作得非常好,但当我尝试在HTC Desire HD上启动应用程序时,菜单打开完美的手势,但其他触摸事件被阻止,顶视图( ViewPager ,滑动菜单在它后面)不滚动。 有人知道如何解决这个问题吗? 提供答案可能会有所帮助(这就是我使用菜单的方式): private void initSlidingMenu() { mSlidingMenu = new SlidingMenu(getApplicationContext()); mSlidingMenu.setMode(SlidingMenu.LEFT); mSlidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN); mSlidingMenu.setShadowWidthRes(R.dimen.default_shadow_width); mSlidingMenu.setShadowDrawable(R.drawable.defaultshadow); mSlidingMenu.setBehindOffsetRes(R.dimen.default_behind_offset); mSlidingMenu.setFadeDegree(0.35f); mSlidingMenu.setMenu(firstPage); mSlidingMenu.attachToActivity(this,SlidingMenu.SLIDING_CONTENT); } 在onPageSelected() ,我禁用菜单或启用它,因此菜单仅出现在左页: @Override public void onPageSelected(int arg0) { ActivityCompat.invalidateOptionsMenu(this); if (arg0 == Utils.DEFAULT_PAGE) mSlidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); else mSlidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_NONE); }

当导航回片段时,片段中的Viewpager没有得到更新

以下是我的ViewpagerAdapter的代码 private class ImagePagerAdapter extends FragmentStatePagerAdapter { public ImagePagerAdapter(FragmentManager fm) { super(fm); // TODO Auto-generated constructor stub } @Override public Fragment getItem(int arg0) { // TODO Auto-generated method stub Fragment fragment = new DemoObjectFragment(); Bundle args = new Bundle(); args.putInt(DemoObjectFragment.ARG_OBJECT, arg0 ); fragment.setArguments(args); return fragment; } @Override public int getCount() { // TODO Auto-generated method […]

Android – FAB在viewpager中的不同片段之间导航时隐藏

我正在尝试做一些非常简单的事情。 我希望FAB只显示在我的TabLayout中的一个选项卡上,并在导航到另一个选项卡时隐藏。 因此,例如,一个选项卡允许您在FAB中添加新项目,但下一个选项卡不允许您添加项目。 我遵循了“典型的”XML设计布局: 我对FAB使用了以下行为。 这导致任何upscrolls导致FAB消失,并将在缩减滚动时返回到屏幕上: public class ScrollingFABBehavior extends FloatingActionButton.Behavior { private int toolbarHeight; public ScrollingFABBehavior(Context context, AttributeSet attrs) { super(); this.toolbarHeight = getToolbarHeight(context); } @Override public boolean layoutDependsOn(CoordinatorLayout parent, FloatingActionButton fab, View dependency) { return super.layoutDependsOn(parent, fab, dependency) || (dependency instanceof AppBarLayout); } @Override public boolean onDependentViewChanged(CoordinatorLayout parent, FloatingActionButton fab, View dependency) { […]

如何使PagerAdapter加载所有页面

我知道默认情况下, PagerAdapter仅加载当前页面,下一页面和上一页面。 有没有办法改变它,所以它会加载每一页? 谢谢!