Articles of android viewpager

ViewPager里面的片段问题

我有问题,查看页面里面的一些片段。 使用视图分页器我使用FragmentPagerAdapter。 并确定我得到java.lang.IllegalStateException:尝试运行我的应用程序时, recursion进入executePendingTransactionsexception。 大多数人都说FragmentPagerAdapter是不可能的,所以如果这个问题是无效的,我很抱歉。 我只是希望,也许有人对这个问题及其可能的解决scheme有一些新的想法。 PS我有一个build议,在AsyncTask设置适配器(我可以澄清这种情况下,如果有人需要它),但这个解决scheme有一些与恢复这种片段状态相关的错误,所以它是为我工作。

Viewpager在RecyclerView行内不显示

我想做一个“照片细节”活动或片段,我在上面和下面显示照片aViewpPager,显示相关照片(2选项卡)的评论和喜欢的照片。 为了使屏幕“滚动”,所以我可以向上/向下滚动的评论和喜欢和左/右滑动我决定使用2行的RecyclerView: 行1:照片(ImageView)。 行2:SlidingTabLayout + ViewPager + FragmentPagerAdapter。 代码编译并运行,显示图像和slidingTabLayout而不是ViewPager。 所以我的两个主要问题是: 1-我的实现有什么问题 2-是否有一个替代或更好的解决scheme,我想实现? 注意:我不想使用带有header的listView。我想使用RecyclerView,因为从networking上添加顶部/底部元素更容易。 PhotoDetailsActivity.java public class MainActivity extends ActionBarActivity { RecyclerView recyclerViewPhotoDetails; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.recyclerViewPhotoDetails = (RecyclerView) this.findViewById(R.id.recycler_view_photo_details); this.recyclerViewPhotoDetails.setLayoutManager(new LinearLayoutManager(this)); this.recyclerViewPhotoDetails.setAdapter(new PhotoDetailsRecyclerAdapter(this.getSupportFragmentManager())); } } PhotosDetailsRecyclerAdapter.java public class PhotoDetailsRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private static final int ROW_IMAGE = 0; private […]

用ViewPager中的另一个片段replace片段

我使用一个ViewPager和一个FragmentPagerAdapter来承载三个不同的片段 [Fragment1][Fragment2][Fragment3] 我想要实现的是成功地用一个全新的片段Fragment4replaceFragment1,如果一个特定的任务成功的话。 当我使用.. FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.replace(R.id.fragment1_layout_id, fragment4); transaction.commit(); ..碎片被精美地replace,Fragment4被显示而不是Fragment1。 尽pipe我一刷到片段3,然后又回到片段4,片段1已经卷土重来。 那么,如果我使用.. FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.remove(fragment1); transaction.commit(); ..Fragment1被删除,当我回来Fragment4在那里。 所以这个解决scheme的问题是,我无法find一个方式来立即显示Fragment4作为Fragment1被删除,即使我试过: transaction.add(fragment4); transaction.show(fragment4); 下面是我的FragmentPagerAdapter实现在这个时候的样子, 没有任何事务pipe理 : public static class PagerAdapter extends FragmentPagerAdapter { public PagerAdapter(FragmentManager fm) { super(fm); } @Override public int getCount() { return VIEW_COUNT; […]

PagePadapter中的InstantiateItem和ViewPager中的AddView混淆

到目前为止,我一直在黑客一起使用示例来感受整个Anfroid SDK的API。 但是我陷入了僵局。 我想从一个XML文件中使用2个TextViews对一个LinearLayout进行充气。 这些将是分页视图。 我只是无能为力,并意识到我完全不明白代码中发生了什么。 看看源代码,我可以看到ViewPager.addNewItem方法从提供的适配器调用InstantiateItem。 并且在populate()中调用addNewItem。 填充在其他地方被调用。 无论如何,在我已经看到的方法被重载的PagerAdapter的例子中,你必须包括一个调用AddView的ViewPager收集从viewpager作为parameter passing。 如果我想添加多个视图,我认为这将是不止一次调用addView的情况,但作为instantiateItem返回一个Object到ViewPager(在这个例子中,我有它返回的视图,它添加),我不知道该怎么回报。 我已经尝试返回充气的视图和一些其他的东西。 请有人可以解释这里发生了什么? 非常感激。 中号 @Override public Object instantiateItem(View collection, int position) { layout = inflater.inflate(R.layout.animallayout, null); TextView tv = (TextView) layout.findViewById(R.id.textView1); tv.setText("1________________>" + position); TextView tv2 = (TextView) layout.findViewById(R.id.textView2); tv.setText("2________________>" + position); ((ViewPager) collection).addView(layout); return layout; }

以前的片段在新的片段下可见

我有一个选项卡+ ViewPager布局,并在这些选项卡之一,我有一个列表视图。 当我在onclick上replace该列表片段时,仍然可以看到新片段下的旧片段。 看到: 码: FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); HallsInStateFragment hallsForState = new HallsInStateFragment(); transaction.replace(R.id.container, hallsForState); transaction.addToBackStack(null); transaction.commit(); R.id.container是视图中的FrameLayout。

如何获得给定项目的ViewPager的子视图

我会尽量保持简短和简单的问题。 View activeView = mViewPager.getChildAt(mViewPager.getCurrentItem()); 当前项目是0和1时返回子视图。但是,如果当前项目是2,则返回null 。 这是为什么? 编辑:让我重述一下自己。 如何在任何给定的项目位置获得ViewPager的子View?

Android – ListView中的延迟点击

我在我的应用程序中有以下结构: FragmentActivity与ViewPager持有多个片段由FragmentStatePagerAdapterpipe理与Android 2.1的兼容性包 每个片段都包含ListView 。 ListView中的每个元素都有一个带有两个TextViews和一个Button的LinearLayout 。 LinearLayout和button有onClickListeners (分开)。 点击LinearLayout开始另一个Activity 。 我注意到,点击行为是非常不一致的:有时行动立即执行,但很多时候它被延迟,有时甚至被忽略,无论我点击多less次。 它变得更加怪异,因为我可以点击,只有当我开始滚动列表时才会执行该动作。 我尝试了setFocusable(false)和setSelectable(true)各种组合,但似乎没有任何区别。 有任何想法吗? 我会很乐意提供更多的细节。

如何正确隐藏和显示使用新的devise库API的操作栏?

背景 假设我在这个活动中有这些元素: 操作栏(实际上是一个工具栏) 选项卡(使用TabLayout) ViewPager,带有碎片。 每个片段都有ListVIew / RecyclerView。 我希望和许多应用程序具有相同的行为,当滚动时,操作栏将隐藏或显示。 一个很好的例子就是Play商店的滚动function。 像这样的东西(但在ListView当然在片段): 问题 我已经find了“ Android-ObservableScrollView ”库,它显示了如何为多种types的滚动视图做到这一点,但它不处理新的TabLayout使用情况(加上它有问题),如新样本所示,像cheesesquare 。 在devise库的新API(在“cheesesquare”示例中显示)上,它更自动化,因此您不需要创build太多的样板来处理滚动以及如何处理它。 类似的东西: <android.support.v4.widget.DrawerLayout <android.support.design.widget.CoordinatorLayout> <android.support.design.widget.AppBarLayout> <android.support.v7.widget.Toolbar app:layout_scrollFlags="scroll|enterAlways"/> <android.support.design.widget.TabLayout/> </android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager app:layout_behavior="@string/appbar_scrolling_view_behavior" /> <android.support.design.widget.FloatingActionButton/> </android.support.design.widget.CoordinatorLayout> <android.support.design.widget.NavigationView/> </android.support.v4.widget.DrawerLayout> 这个请求者承诺,小吃店将在FAB下方,并且根据碎片的内部RecyclerView自动地动作(显示/隐藏)动作栏。 事情是,这似乎只适用于RecyclerView ,而不是与ListView。 由于它们非常复杂,因此将它们转换为RecyclverViews将非常困难。 这个问题 如何使上述机制也适用于ListView呢? 有没有办法做到这一点? 如果是这样,怎么样? 编辑:遗憾的是,谷歌似乎不会支持这种行为的ListView,但只为RecyclerView和NestedScrollView(写在这里 )。 所以我试图使用“ Android-ObservableScrollView ”库,但它有很多滚动问题,包括抛出问题。 现在我决定给Android-ParallaxHeaderViewPager 。 任何人都可以请告诉我如何使它在当前的情况下工作? 这甚至有可能吗? 编辑:我决定转换到RecyclerView毕竟。 然而,我尝试过的所有示例都显示了一个问题:在停止滚动时,操作栏(甚至可能是FAB)可能会被截断,而不是Play商店,在那里它将变成隐藏/显示的animation。 编辑:看来我需要使用setExpanded当有空的onScrollStateChanged。 问题是,如何决定什么时候扩大以及何时崩溃。

在viewpager中的3个android碎片,如何让它们都活着?

我有一个视图至less有3个片段。 如果用户将数据input到A中,则Binput数据,然后inputC并返回到数据从A中丢失。 我想我在某个地方看到这和内存pipe理有关,因为当我离得太远的时候,碎片只能连接或者存储相邻的碎片。 但是,我希望保留每个片段的生命,即使我有> 3。 除非明确指示,否则我怎么能告诉Viewpager不要杀死一个片段?

如何在ViewPager中启用CardView

我已经尝试在ViewPager中使用CardView,每次我在CardView上向左/向右滑动时,都会进入下一个屏幕。 然后我想要卡片自己删除。 目前作为一个独立的工作正常,但是当我结合,那么只有viewpager工作,而不是cardswipe解雇。 我试图用下面的代码禁用ViewPager,但是这个代码也禁用了CardView轻扫手势。 我怎样才能使CardView有手势,当你在2卡之间刷卡,那么它应该有ViewPager作为它没有连接到卡元素。 或完全禁用ViewPager并将其用作button,并在CardView上启用滑动。 我真的很感激任何帮助。 提前致谢。 仅供参考:我已经在ViewPager中尝试过android_horizo​​ntal_listview,并且工作正常,完全像这样。 对于ViewPager: mPager.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return true; } }); 对于CardView: SwipeableRecyclerViewTouchListener swipeTouchListener = new SwipeableRecyclerViewTouchListener(mRecyclerView, new SwipeableRecyclerViewTouchListener.SwipeListener() { @Override public boolean canSwipe(int position) { return true; } @Override public void onDismissedBySwipeLeft(RecyclerView recyclerView, int[] reverseSortedPositions) { for (int position : […]