Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 碎片页雷达不是';t在添加或删除数据成员时更新视图位置_Android_Android Fragments - Fatal编程技术网

Android 碎片页雷达不是';t在添加或删除数据成员时更新视图位置

Android 碎片页雷达不是';t在添加或删除数据成员时更新视图位置,android,android-fragments,Android,Android Fragments,当碎纸机第一次被制造出来时,一切都很好。但是,当在适配器的某个位置添加或删除数据时,视图将保持在原来的位置 在我的WIP应用程序中演示问题,以及我的应用程序,您可以使用该应用程序重现问题。 我的完整代码可以在我的网站上查看 以下是我的适配器代码(也可用): 更新: 我稍微修改了我的代码,并向组添加了适当的.equals()方法,结果有了一些变化。 getItemPosition现在在开始插入组时被调用两次(对于位置1和位置2),最后两个组视图似乎正在正确更新。但是,添加的和最初的第一个仍然没有更

当碎纸机第一次被制造出来时,一切都很好。但是,当在适配器的某个位置添加或删除数据时,视图将保持在原来的位置

在我的WIP应用程序中演示问题,以及我的应用程序,您可以使用该应用程序重现问题。 我的完整代码可以在我的网站上查看

以下是我的适配器代码(也可用):

更新:

我稍微修改了我的代码,并向组添加了适当的.equals()方法,结果有了一些变化。
getItemPosition
现在在开始插入组时被调用两次(对于位置1和位置2),最后两个组视图似乎正在正确更新。但是,添加的和最初的第一个仍然没有更新。我已经更新了

以下是在开头插入组并更改数据集时适配器的完整输出:

V/TaskListFragmentAdapter(3597): Item found at index 1: com.gawdl3y.android.tasktimer.classes.Group@b3336038
V/TaskListFragmentAdapter(3597): Item found at index 2: com.gawdl3y.android.tasktimer.classes.Group@b330f330

就是这样。

我刚刚查阅了您的资料来源,我认为问题在于您应该在添加新组后刷新任务中的组。 假设你有3个小组,第一组你有一些任务(比如视频)。现在,您要在第一个组之前添加一个组,因此它将进入列表的位置0。现在您有4个组,并且任务的“组”字段仍然设置为0,因为在添加新组之前,它们位于0组中,并且您没有刷新它。因此,即使ViewPager正在重新创建您的片段,您的任务也不是您想要的


因此,我认为,当您添加一个新组并调用reorder(groups)时,您应该创建一个方法来刷新所有任务的task.group字段。

根据我对您的问题的理解,以及我对您的源代码的简要阅读,我认为问题在于您正在调用
notifyDataSetChanged()
仅在
片段页面的Radapter
上。但是,您还需要通知您的
ViewPager
有关数据集中的此更改


如果您愿意尝试,也可以在指示器上调用
notifyDataSetChanged()
。如果没有,我建议您查看此库中
TabPageIndicator
的代码,看看它是如何实现您想要的效果的。

我终于解决了这个问题。最后我做的是从
FragmentPagerAdapter
切换到
FragmentStatePagerAdapter
的自定义版本。我的结果代码可以在我的网站上看到。相关文件包括和。此自定义版本由UgglyNoodle创建,并由我自己修改。

任务对象上的
属性实际上是组的ID,它是不变的。这不用于任务的排序。事实上,在我实现数据库之前,它根本不用于任何事情。是的,我读得不够仔细,很抱歉。但看起来在添加新组后,您的任务应该以某种方式刷新。当您启动应用程序时,您可以从服务中获得组和任务,而当您添加组时,您只能获得组,这是我所看到的唯一区别。因此,您的组任务连接可能有问题(未刷新)。没有什么特别需要刷新的任务,因为它们包含在组对象中。我在活动中使用的
任务
数组目前也未使用:PAlso,“Getting item”在添加组时根本不会输出,这意味着适配器没有调用getItem来重新创建视图。“item not found”始终被记录,因为当您对类别进行重新排序时,类别
位置
发生了更改,但是
项目。组
具有旧位置,因此这些对象不相等。你应该对此进行调查,然后我认为你解决了你的问题。我看到了这个库,它是我最初打算使用的,直到我发现了
PagerTabStrip
的存在。另外,
notifyDataSetChanged()
ViewPager上似乎不存在。在ViewPager上有
invalidate()
,但这似乎没有改变任何东西。抱歉。。我想我的答案不清楚
notifyDataSetChanged()
位于PageIndicator对象上,而不是
ViewPager
本身
TabPageIndicator
实现可能会提示您在
notifyDataSetChanged()
中实际需要做些什么才能让事情按您的预期工作。这个问题做得很好!视频+到源代码的链接真的很有帮助。我一定要看一看
adapter.groups = groups;
adapter.notifyDataSetChanged();
V/TaskListFragmentAdapter(3597): Item found at index 1: com.gawdl3y.android.tasktimer.classes.Group@b3336038
V/TaskListFragmentAdapter(3597): Item found at index 2: com.gawdl3y.android.tasktimer.classes.Group@b330f330