【问题标题】:ViewPager wont refreshing FragmentViewPager 不会刷新 Fragment
【发布时间】:2017-08-27 14:18:29
【问题描述】:

我有一个 tabView 和 viewPager
我使用(完全是一个)本地数据库来获取数据
当我对我的数据库进行更改时,至少我应该转到下一个(或返回)2 个选项卡以在我的 viewPager 片段中发生更改(我有 4 个选项卡)
而且我尝试了很多方法,例如 POSITION_NONE 和 INVALIDATE() 和... 但没有改变!!!
谁能帮助我如何刷新我的片段(在当前页面和其他页面上)?

public class FragmentList extends Fragment {
    public static RecyclerView TaskRecyclerView;
    private View view;
    private AdapterTask adapterTask;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view=inflater.inflate(R.layout.fragment_tasks,container,false);
        TaskRecyclerView =(RecyclerView)view.findViewById(R.id.task_recycler);
        DatabaseOpenHelper databaseOpenHelper=new DatabaseOpenHelper(getContext());
         adapterTask =new AdapterTask(getActivity(),databaseOpenHelper.getTasks());
        TaskRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false));
        TaskRecyclerView.setAdapter(adapterTask);
        return view;
    }

    public static FragmentList newInstance() {

        Bundle args = new Bundle();

        FragmentList fragment = new FragmentList();
        fragment.setArguments(args);
        return fragment;
    } 
}

正如我所说,在我更改至少 2 个选项卡之前没有发生任何更改(即使在 PAGE SELECTED() 中)...我的意思是,例如,当我在第 1 个选项卡中时,我转到第 2 个选项卡,然后没有.3 , 所以 3 号 刷新 到 新 数据 , 当 我 回到 1 号 选项卡 时 它 也 刷新 了
但标签号 2 仍然是旧数据!!!
我应该去 4 号标签,然后回来查看 2 号标签的变化。

重要更新
我发现,我的问题是 offScreenPageLimit() 没有达到 0。
我怎么能把它设置为 0 ?

【问题讨论】:

    标签: android android-fragments android-viewpager android-recyclerview


    【解决方案1】:

    使用 onPageSelected 上的 notify 方法刷新数据。 您的代码将是

    adapterTask.notify();

    【讨论】:

    • 我在片段中的 onResume() 中尝试了您的建议,但得到一个错误(强制关闭!),说它没有被线程锁定...我做错了什么?
    • 您必须在 onPageSelected 上刷新适配器。使用 notifyDataChanged 的​​通知
    • 我也这样做了...甚至更改为 FragmentStatePagerAdapter 或尝试分离和附加...但是,还是一样...
    【解决方案2】:

    您是否尝试过 .notifyDataChanged();在你的适配器上?

    【讨论】:

      【解决方案3】:

      尝试覆盖此方法。这个方法会告诉你片段是否可见。

           @Override
              public void setUserVisibleHint(boolean isVisibleToUser) {
                  super.setUserVisibleHint(isVisibleToUser);
                  if (isVisibleToUser) {
      // visible
                  }
                  else {
                  }
              }
      

      【讨论】:

        猜你喜欢
        • 2016-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-06
        • 1970-01-01
        相关资源
        最近更新 更多