【发布时间】:2013-02-14 01:32:09
【问题描述】:
似乎之前讨论过刷新问题,但没有一个解决方案对我有用。
我想要做什么: 我正在使用 FragmentStatePagerAdapter。适配器的每个位置都包含一个片段,该片段具有线性布局,外观类似于国际象棋,每个单元格都由 CheckedTextView 表示。
还有一个侦听器,它应该侦听点击并删除单元格上的先前选择并进行新选择。
什么工作: 每个片段都正确加载了所有数据/默认状态(在片段加载到列表中时计算)
当我单击一个单元格时,已保存单元格列表中的所有状态都被正确获取,并且我可以在调试时更改查看代码中的状态更改。同时,我为表示单元格的 CheckedTextView 分配了一个新状态。设置如下:
CheckedTextView cellView = (CheckedTextView) GridRow.getChildAt(c);
cellView.setSelected(false);
cellView.setChecked(false);
cellView.setTag(cellsChess.get(i).get(c));
问题: 即使正确存储和分配了值,视图也无法刷新,视图中单元格的值也不会更新。
我尝试过但无效的提示: 1。调用 adapter.notifyDataSetChanged: 只有当我们被覆盖时才能在使用 FragmentStatePagerAdapter 时调用:
@Override
public int getItemPosition(Object object){
return POSITION_NONE;
}
2.为 DestroyItem 添加 Overriden 方法并将片段添加到 getItem 上的 Map:
这不合适,因为我正在使用 FragmentStatePagerAdapter,因此使用此 pagerAdapter 的全部目的将不复存在。
3.调用无效: 这不适合这种情况,我需要实时刷新。
4. instanceiteItem() 中的 setTag() 方法: 我认为这在这种情况下是不合适的。
引用的线程: Refresh images on FragmentStatePagerAdapter on resuming activity
ViewPager PagerAdapter not updating the View
notifyDataSetChanged fails to update ListView
我已尝试尽可能清楚地说明我的问题,如果有人需要更多说明,请询问。
我们将不胜感激紧急回复,
干杯
****更新*****
我使用的是 ViewPagerIndicator,而不是默认的 ViewPager。
【问题讨论】:
-
在您的设置中,每个片段代表什么?一次只在屏幕上显示一个片段吗?你添加的代码在哪里?它在片段类中吗?最后,什么是 GridRow?
-
嗨,Sherif,每个片段代表一个棋盘。我有一个调用容器片段的活动,这个 containerFragment 有一个 viewpager,它设置了 FragmentStatePagerAadaper。每个适配器项都是一个片段,并且在其 onCreatView 的这个片段中,每个国际象棋视图都被初始化。此外,单元格的侦听器位于同一片段中,我在其中检查当前状态和新状态并相应地更改状态。 GridRow 只是代表一个单元格的checkedTextview 行。我希望这能回答你所有的问题,任何提示......?
-
一切都发生在你的片段中的事实意味着不需要所有这些麻烦。你确定你的选择器(背景)是正确的吗?你可以为每个单元格显示它和你的 xml。通常,当您尝试更新 viewpager 中的特定片段时,会发生视图未更新的情况。
-
所有片段的选择功能都相同(没有具体说明)。而且我也不想从视图寻呼机更新任何东西,它全部在片段中。抱歉,保密协议不允许我共享代码。简而言之,我如何更新片段侦听器中的视图。谢谢
-
FragmentAdapters 中的Fragments 通常是自包含的 - 除非Fragment自行更改其视图,否则如果没有像@987654330 这样的黑客,你真的无能为力@Map和findViewByTag。如果您需要从Activity进行操作并且厌恶黑客攻击,您需要建立自己的方式来进行Activity->Fragment通信,而不依赖于Activity能够获得参考到Fragment(例如,广播、Guava's - 或 Otto - 或大使等活动巴士等)。就个人而言,我选择 WeakReference Map - 它比干净的方式简单得多。
标签: android android-fragments android-viewpager checkedtextview fragmentstatepageradapter