当前位置: 首页 > 知识库问答 >
问题:

使用FragmentStatePagerAdapter时刷新片段视图

宰父君昊
2023-03-14

似乎刷新问题之前讨论过,但没有一个解决方案对我有效。

我正在尝试做的事情:我正在使用FragmentStatePagerAdapter。适配器的每个位置都保存一个片段,该片段具有类似国际象棋的线性布局,每个单元格由CheckedTextView表示。

CheckedTextView cellView = (CheckedTextView) GridRow.getChildAt(c);
                                cellView.setSelected(false);
                                cellView.setChecked(false);
                                cellView.setTag(cellsChess.get(i).get(c));

问题:即使正确存储和分配了值,视图仍然不能刷新,视图中单元格的值也不会得到更新。

我尝试过的建议都不起作用:1。调用Adapter.NotifyDataSetChanged:只有当我们重写了以下内容时,才可以在使用FragmentStatePagerAdapter时调用Adapter.NotifyDataSetChanged:

@Override
    public int getItemPosition(Object object){
        return POSITION_NONE;
    }

2.为DestroyItem添加覆盖的方法,并将碎片添加到GetItem上的地图中:

引用线程:在恢复活动时刷新FragmentStatePagerAdapter上的图像

ViewPager PagerAdapter未更新视图

动态更新ViewPager?

****更新*****

我使用的是ViewPagerIndicator,而不是默认的ViewPager。

共有1个答案

孟选
2023-03-14

关于notifyDataSetChanged()函数,我有两种不同的体验。

当我使用ArrayAdapter的子类更新ListView时,它可以正常工作。当我调用notifyDataSetChanged()时,将更新ListView项。

但是,当我使用FragmentStatePagerAdapter的子类更新ViewPager时,调用notifyDataSetChanged()不起作用。NotifyDataSetChanged()负责调用所有注册的DataSetObserver的onChanged()函数,但是观察者并没有像ArrayAdapter中那样自动注册。你得自己做地面工作。

public class DetailFragDataSetObserver extends DataSetObserver {
private DetailTextFragment view_instance;
protected static ArrayList<DetailFragDataSetObserver> list = new ArrayList<DetailFragDataSetObserver>();

public DetailFragDataSetObserver(DetailTextFragment f){
    view_instance = f;
    list.add(this);
}
public DetailTextFragment getView(){
    return view_instance;
}
public static DataSetObserver findDataSetObserverFor(DetailTextFragment f){
    for ( int i = 0; i<list.size(); i++){
        if ( list.get(i).getView() == f)
            return list.get(i);
    }
    return null;
}
public static void release(DataSetObserver observer){
    list.remove(observer);
    ((DetailFragDataSetObserver)observer).view_instance = null;
}
@Override
public void onChanged(){
    assert null != view_instance;

    view_instance.vUpdateData();
}
}
  android.widget.ArrayAdapter
  android.support.v4.app.FragmentStatePagerAdapter

这就是为什么前者很容易工作,而后者不是。

 类似资料:
  • 问题内容: 我搜索了许多看起来像这样的问题,但没有找到我的答案。 我有一个活动,该活动具有3个可通过操作栏访问的选项卡。我通过添加3个片段来实现这一点,这些片段使我自定义视图扩展了视图类。 在数据库更改的那一刻,我尝试通过调用invalidate()/ postinvalidate()刷新选项卡中的视图,但这不起作用。正如我考虑的其他许多选项一样,调用片段的onCreateView也是如此。 但是

  • 我试着在发帖前在里面搜索,但我不能理解如何刷新片段中托管的ViewPager的内容。你能帮帮我吗? 谢谢你抽出时间 } 这是pageviewer中的imageview的类

  • 我有一个包含FragmentStatePagerAdapter的活动在这个FragmentStatePagerAdapter中有三个片段。或者,当调用适当的getItem()时,它们会被启动。 该活动执行数据密集型任务,完成后发送广播。我已经在FragmentStatePagerAdapter中的每个片段中注册了一个广播接收器。 现在这一切都很好,除了一件事: 当我们滚动到位置2处的片段(位置1和

  • 我创建了一个使用提供小型库的活动。但是,我不能让它在活动恢复时刷新(例如,在从其他活动返回后)。每次前两张图片将是空白的,只有当我刷两张图片到旁边,他们得到刷新。我找到的答案都不起作用(特别是重写) 我是这样设置的: 在我试图修复它之后,代码有点乱...但是:删除不起作用。我已经将放在了几个必须调用的地方(如),但没有任何结果。我有点绝望了。

  • 我设法创建了一个自定义列表视图,并为每一行添加了一个删除按钮。删除按钮运行良好,当我单击按钮时,该行会从数据库中删除。问题是,当我删除一行时,它会保留在列表中,直到我通过移动到另一个片段来刷新片段并返回,然后它从列表中消失。我想要的是,当我删除一行时,它会立即从列表视图中消失。我尝试了一些解决方案来刷新整个片段或删除完成后的列表视图,但它们不起作用! 这是我为适配器类中的删除按钮编写的代码 之后