问题标签 [fragmentpageradapter]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
9872 浏览

android - 无法从 ViewPager 中的另一个片段刷新/更新片段中的列表视图

我很难弄清楚接下来的事情。

我所拥有的:我有一个查看器和几个页面。在这个问题中,只有其中两个很重要,我们称它们为 Fragment1 和 Fragment2,它们彼此相邻。Fragment1 包含一个列表视图,其中填充了来自互联网(外部数据库)的数据。Fragment2 包含一个简单的按钮。

我的目标:如果我单击 Fragment2 中的按钮,我会向外部数据库添加一个新项目。我想用这个新项目更新/刷新 Fragment1 中的列表视图。

在我的情况下notifyDataChanged()不起作用,但到目前为止,我确信它会重新实例化每一页。我将以最清晰的方式介绍我的问题,所以让我们看看我的代码,这是我的ViewPager适配器:

Fragment1 onCreateView()(很快):

我创建了ViewPager适配器,然后设置了适配器,ViewPager然后在我的 Main 类中用我的片段填充我的 viewpager。在此之后,我将拥有一个带有 2 个片段的功能齐全的 ViewPager。

在 Fragment1 中,我有一个列表视图,每个列表项中都有一些文本视图。加载工作完美:我创建ArrayLists并用来自外部数据库的数据填充列表。加载完成后,我用这些大量数据填充列表视图。在片段 2 中,我单击按钮,我希望更新该列表视图,因此应该在列表视图中创建一个新行,其中包含来自外部数据库的一些数据。(当然写入数据库有效)

我的猜测是,我可能不会刷新 ArrayLists 或者我不会重新实例化 Fragment1,因此只有当我退出并再次启动应用程序或者我在 ViewPager 中滑动太多以致 Fragment1 分离时,getDataFromSQL() 方法才不会转动。所以我无法更新或刷新 Fragment1。有人可以帮助解决这个问题吗?

编辑

我设法通过向 fragment2 传递消息来更新自身来实现它。但我不确定这是否是一个好的解决方案并且没有更好的方法,即只是以某种方式刷新整个片段。

解决方案

好吧,我想这一定是我的懒惰,但我现在解决了。对于仍然想从另一个片段刷新片段或只是在片段之间建立连接的每个人,我告诉您适当的方法:

  1. 您必须实现自己的侦听器,以帮助您通过持有者活动在片段之间进行通信。这可以在这里找到:http: //developer.android.com/training/basics/fragments/communicating.html。非常简单实用。

  2. 您必须检索片段,这又很简单:从 ViewPager 中检索片段这些 Q 提供了几种可接受的方式,我使用了SpareArray解决方案。

无论如何感谢您的帮助!

0 投票
4 回答
62990 浏览

java - 如何使用 FragmentPagerAdapter 让标签具有不同的内容?

我想要有不同的标签,你可以像在 android 市场中一样在其中滑动。每个选项卡应使用一个片段并为其使用一种方法。

这是我的 FragmentPagerAdapter 类:

每个片段类型/选项卡都有三个类:

每个片段都应该是可定制的,这就是为什么我有三个类。

然而,应用程序在 getItem 方法中崩溃。有任何想法吗?谢谢!

编辑:完整的 MainActivity.java:

0 投票
1 回答
1516 浏览

android - ViewPager FragmentPagerAdapter 只更新最后一个片段 onNavigationItemSelected

我有一个ViewPager托管在一个片段中,该片段托管两个由SQLite 查询返回ListFragments的填充。Cursor我最近在我的操作栏中添加了一个微调器,它允许用户对ViewPager. 但是,每次选择微调器时,即使当前显示第一个列表,也只会对第二个列表进行排序。似乎ViewPager没有跟踪当前显示的ListFragment.

我尝试getItemPosition在我的适配器中覆盖并使用 n otifyDataSetChanged,但这没有帮助。我尝试缓存当前活动片段的位置onAttach()也无济于事。我还尝试使用OnSortChanged我的适配器实现的接口来尝试重新创建ListFragments. 我在这里真的很茫然。这是我当前的代码:

我的主要片段:

我的FragmentPagerAdapter

最后,ListFragment

提前感谢您的帮助!

0 投票
1 回答
822 浏览

android - FragmentPagerAdapter 不想要页面标题

我不希望片段页面上的页面标题,但是当我删除 getPageTitle 段或将字符串设置为“”时,每个片段顶部都有一个我无法摆脱的空间。

有什么建议吗?

0 投票
2 回答
13162 浏览

android - java.lang.InstantiationException:无法实例化类...没有空的构造函数

我找到了与我类似的问题的主题,但到目前为止找不到我正在寻找的答案。我的应用程序包含一个FragmentActivity托管一个ViewPagerAdapter(FragmentPagerAdapter 的子级),每个选项卡中都有一个片段。我的 ViewPagerAdapter 在父活动的 OnCreateView 函数中实例化

ViewPagerAdapter 实现了所需的最少方法 getItemgetCount并且getItemPosition

getItem为每个位置初始化一个不同的片段:

setRetainInstance(true)在我努力解决我面临的问题时添加了调用,但也没有帮助。

最后,上面的每个片段都以应用程序上下文作为参数实现了一个公共静态 newInstance() 函数。例如 FragmentNearbyOffers 包含以下内容:

一个更重要的信息是父活动被声明为 singleInstance 并且出于某些原因我想保持这种状态。

一切正常,但在某个时候,当活动在后台运行了一段时间,我尝试通过 TaskManager 或单击应用程序图标返回它时出现异常

类名肯定存在,它是公共的,并且没有构造函数,就像有一个空的构造函数一样。我什至明确添加了一个空构造函数,但这也无济于事,尽管我验证了它被调用了。

从我从这里的各种帖子中了解到,Android 在恢复应用程序时,会将未链接到原始活动的片段的新实例放入 FragmentPagerAdapter 中。我也验证了这一点,因为当从片段内部调用 getActivity 时,我接收null ..但我不明白为什么我得到这个异常,因为有一个空的构造函数......我什至不知道在哪里解决这个问题,因为执行进入活动的onCreate,然后立即进入片段的空构造函数,然后我得到异常..片段的任何其他方法,即onAttach,onCreate等根本不被调用..所以看起来它在构造片段时实际上崩溃了..

我附上了我得到的整个堆栈跟踪,以防万一它有帮助:

0 投票
0 回答
2769 浏览

android - ViewPager中的Fragment,无法获取当前的Fragment实例

在 FragmentParentNewsDetail.java 类中,我有一个 ViewPager,然后我使用 FragmentPagerAdapter 将每个页面设置为相同的 Fragment,如下所示:

在 FragmentNewsDetail.java 中,我有一个公共方法:

然后我想像这样调用 FragmentNewsDetail.java 中的 getNewsTitle() 方法:

但是 getNewsTitle() 总是返回“”,我对此感到困惑。

通过以下方法修复:

来自:使用 FragmentPagerAdapter 时如何获取现有片段

非常感谢!

0 投票
1 回答
2213 浏览

android - 使用 FragmentPagerAdapter 上的意图打开新活动

我想在 Tile Strip 下打开新活动(List Activity)List.java

如何在 onCreateView 上使用意图或如何在onCreateView 上添加列表

main.java 是 Eclipse 上的 Swipe View 和 Tile Strip 示例

主.java:

列表.Java:

0 投票
1 回答
9957 浏览

android - FragmentPagerAdapter and FragmentStatePagerAdapter

I am currently thinking which implementation of PagerAdapter should I use. I've got dilemmas connected to both of them. Let me show you what are these.

1# FragmentPagerAdapter

Works fine, It creates new instances of fragments when none previous instances are available and retrieves previously fragments when there's such opportunity.

I've read recently on StackOverflow that, method PagerAdapter's getItem() method is called ONLY when it need to create fragment, but - it is called over and over and I had to handle creating new instances and retrieving old ones inside this method's body.

BUT - Only few callback and life-cycle methods are called. For example I can't manage to onSaveInstanceState to be called. So there's no way to save fragment's state - of course I can use SharedPreferences or something else, but I wanted to use callback methods. Is there any way to accomplish that?

2# FragmentStatePagerAdapter

Works perfectly, saves state of every fragment that ViewPager holds.

BUT - this PagerAdapter ALWAYS creates new fragment. I checked it inside constructor.

Isn't that inefficient? I saw Romain Guy on Google I/O materials saying that creating new Views is not efficient, especially when we creating lots of Views like in ListView so we use convertView to retrieve existing View and change it for our purposes as many times as we want to. So fliping between pages is quite similar - many new Views - because fragment is a some kind of View

In both PagerAdapters I tried trick with Overriding destroyItem() method but It didn't work at all.

And here's my question.

What should I do?

Should I use SharedPreferences and option #1 with FragmentPagerAdapter or option #2 with FragmentStatePagerAdapter?

Is there any possibility, that I do something wrong within these adapters, to they behave not as we expect to?

Below is my code divided into "readable" parts

PagerAdapter part #1:

PagerAdapter part #2:

PagerAdapter part #3:

ViewPager code:

0 投票
0 回答
1350 浏览

android - 如何使用 FragmentPagerAdapter 从 ViewPager 中删除所有片段

我有一个ViewPager用作照片库的FragmentPagerAdapter. 没有真正特殊
的代码。返回一个带有与该位置对应的照片 的新片段。它有一个之前设置的图像列表。 我有一个允许查看另一个画廊的侧面菜单,但是我无法将照片更新为新的一组照片。我更改并调用中的图像列表,但是片段永远不会重新创建,因此它们不会更新。 ViewPager
FragmentPagerAdapter::getIem(int position)ImageView
FragmentPagerAdapternotifyDataSetChanged()

我尝试了一些在 SO 上找到的解决方案,但没有成功(片段不更新):

  • POSITION_NONE从返回FragmentPagerAdapter::getItemPosition(Object object)
  • 试图更新ImageView内部Fragment:我真的不知道在哪里可以做到这一点。
  • 环境ViewPager::setOffscreenPageLimit(0)
  • 环境ViewPager::setAdapter(null)

我想要的是它可以返回,FragmentPagerAdapter::getIem(int position)但我似乎无法实现这一点,因为它会将片段留在FragmentManager.
是我自己制作的唯一出路PagerAdapter吗?

0 投票
0 回答
358 浏览

android - Android FragmentPagerAdapter findViewById

我有一个加载带有 3 页的 FragmentPagerAdapter 的布局。

简单的问题,我找不到任何使用 findViewById 的视图,我已经搜索了 2 天,找不到解决方案:(

我在这里错过了什么吗?

有什么好榜样可以效仿吗?

提前致谢。