Articles of android viewpager

在片段之间滑动时消失的操作栏button

我有一个应用程序在一个操作栏中的多个选项卡,每个选项卡有一个不同的选项菜单图标集,显示在操作栏。 有些标签有两个图标,有些没有。 问题是,当我在屏幕之间滑动时,单个屏幕的button可能会显示或不显示。 即在一个应该有两个图标的屏幕上,操作栏中将没有图标! 然而,当我点击标签时,屏幕总是显示正确的图标。 我试图在debugging器中分析问题。 我确定FragmentPagerAdapter正确地为新select的Fragment调用了setMenuVisibility(true) ,而其他片段则通过setMenuVisibility(false)调用。 我无法findbutton的外观/消失的确切模式。 我可以在两个屏幕之间左右滑动,每个屏幕有两个不同的button。 这个问题会在1到20次刷卡后发生。 通过用一个图标滑动到屏幕,然后回到具有两个图标的屏幕,消失似乎变得更加严重。 我已经尝试将调用添加到Activity.invalidateOptionsMenu()但它似乎没有影响。 例如,我将这个调用添加到我的TabAdapter的onPageScrollStateChanged(),这是在滑动animation完成后调用的。 我也试过把这个添加到碎片的onResume()或TabAdapter.onTabSelected()完成后,无济于事。 我使用的ActionBarSherlock 4.1.0(和我已经取代了最新的android-support-v4.jar由于不同的问题)。 我的活动扩展SherlockFragmentActivity并简单地实例化一个ViewPager 。 我重写了ViewPager适配器的FragmentPagerAdapter (遵循ViewPager Android文档上的标准示例)。 我的手机运行Android 2.3.5。

将寻呼机视为列表视图行项目

我有一个20行的列表视图,我想设置一个视图寻呼机作为列表视图中的每一行。 由于列表视图行中的项目可能是一个或多个,我想使用视图寻呼机显示列表视图行项目。 为此,我使用下面的代码: 要在列表视图行中显示的自定义布局(作为分页器项目) <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/inner_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="horizontal" > <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_marginRight="6.0dip" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="fill_parent" android:gravity="center_vertical" android:text="Example Value" android:textAppearance="?android:textAppearanceMedium" /> 主列表视图自定义行项目具有查看传呼机 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <android.support.v4.view.ViewPager android:id="@+id/mypager" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout> MyPagerAdapter类 public class MyPagerAdapter extends PagerAdapter { private […]

Android:垂直viewpager中的RecyclerView

我想在一个垂直的viewpager中实现一个recyclerview。 我目前的布局如下所示 VerticalViewpager – Fragment1 – ImageView – Fragment2 – RecyclerView 如果我从Fragment1滑动到Fragment2一切正常。 我可以在回收站内上下滚动。 如果我尝试滑动/回滚到Fragment1,就会出现问题。 如果用户已经滚动到回收站视图的顶部,我想将下一个“向上”滚动事件转发到垂直viewpager。 我试图重写onInterceptTouchEvent方法,但不幸的是仍然没有成功。 有任何想法吗? 谢谢你的帮助 :)

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

我正在用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 […]