处理程序中的RecyclerView适配器更新

时间:2017-03-25 06:12:29

标签: android android-recyclerview notifydatasetchanged

我是android开发的新手。我的应用程序有8秒,7秒,6秒等定时器...所以我已经把时间放在模型类和使用处理程序我每秒更新该模型类值其次我必须更新我的Recycler视图..这里我的代码(到现在为止我已尝试过这个)

  public void startTimerUpdate() {

        handler = new Handler();
        runnable = new Runnable() {
            @Override
            public void run() {
                Gson gson = new Gson();
                Type type = new TypeToken<ArrayList<ProductDetail>>() {
                }.getType();
                arrayList = gson.fromJson(ReadSharePrefrence(getActivity(), ALLPRODUCT), type);
                Log.d("UpdateTime", getTimeInCounter(arrayList.get(0).getCounter()));

                recyclerAdapter.notifyDataSetChanged();
                handler.postDelayed(runnable, 1000);
            }
        };
        handler.postDelayed(runnable, 1000);
    }

但是每隔一秒我就会在我的日志中完美地获得'UpdateTime',但recyclelerView没有更新。

指导我

是的,我已将bind arraylist绑定到recyclerview adpater这里是代码。

   recyclerAdapter = new HomeRecyclerAdapter(getActivity(), arrayList, getActivity().getSupportFragmentManager());
        RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
        recyclerView.addItemDecoration(new SimpleDividerItemDecoration(getActivity()));
        recyclerView.setLayoutManager(mLayoutManager);
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        recyclerView.setAdapter(recyclerAdapter);

2 个答案:

答案 0 :(得分:1)

如果您知道要更新其数据的项目的位置,您可以尝试使用recyclerAdapter.notifyDataSetChanged();适配器方法代替Gson gson = new Gson(); Type type = new TypeToken<ArrayList<ProductDetail>>() { }.getType(); arrayList = gson.fromJson(ReadSharePrefrence(getActivity(), ALLPRODUCT), type);

这里是链接:https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html#notifyItemChanged(int,%20java.lang.Object)

  

通知任何注册观察员该位置的项目已更改。   相当于调用notifyItemChanged(position,null);。

     

这是项目更改事件,而不是结构更改事件。它   表示位置数据的任何反映都已过时   并应该更新。位置上的项目保持相同的身份。

修改

如果您在计时器上更新了多个项目,则可以

<base>

这个代码阻止处理程序,只是在处理程序中处理你的操作getCounter()。使用这种方法,您可以避免每1秒在处理程序中执行读/写操作。

答案 1 :(得分:1)

在处理程序中尝试此操作:

arrayList.clear();
Gson gson = new Gson();
                Type type = new TypeToken<ArrayList<ProductDetail>>() {
                }.getType();
arrayList.addAll(gson.fromJson(ReadSharePrefrence(getActivity(), ALLPRODUCT), type));
recyclerAdapter.notifyDataSetChanged();