代码之家  ›  专栏  ›  技术社区  ›  Abhi

从其他活动更新回收程序视图项

  •  1
  • Abhi  · 技术社区  · 7 年前

    我正在尝试从其他活动更新/刷新回收器视图数据。

    我的设置是,我有一个片段中运行的回收器视图。单击回收器视图项将打开一个新活动,用户在其中进行取消更新,数据将保存在数据库中。然后返回(onbackclicked)到片段回收器视图未更新。但是,数据是保存的,因此如果我关闭一个应用程序并重新启动,将显示更新。

    有人能指导我如何继续解决这个问题吗?

    注意:我正在使用observer来观察recycler视图中的项目,但是由于更新发生在不同的活动中,recycler视图没有更新。如果我在不打开新活动的情况下从同一个片段进行更新,观察者就会工作。

    提前谢谢你

    4 回复  |  直到 7 年前
        1
  •  3
  •   Jay Ryu    7 年前

    片段仍然有onresume方法。在这里您可以更新数据集列表。 别忘了更新recyclerview。

    @Override
    public void onResume() {
        super.onResume();
    
       //update whatever your list
       adapter.notifyDataSetChanged();
    }
    
        2
  •  0
  •   Shiva Snape    7 年前

    因为片段没有onrestart生命周期,所以可以这样使用,

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
      super.setUserVisibleHint(isVisibleToUser);
      if (isVisibleToUser) {
        //refresh recycleradapter with notifydatasetchanged here
        //recyclerAdapter.notifyDataSetChanged();
    
      }
    }
    
        3
  •  0
  •   Rasel    7 年前

    你可以用 LiveData 用于RecyclerView。当数据源更改时,它将自动更新recyclerview。

        4
  •  0
  •   Khaled Lela    7 年前

    我在片段活动中放了一个recycler视图,其中包含许多卡片视图项 但是当我点击Refresh按钮时,这些项只是第一次创建

    下次加载片段时,不会再次获取项,这只是第一次。

    public class PostFragment extends Fragment {
        private List<PostData> PostDataList = new ArrayList<>();
        PostDataAdapter adapter=new PostDataAdapter(PostDataList);
        RecyclerView recyclerView;
        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
            View view=inflater.inflate(R.layout.posts_menu,container,false);
            recyclerView =view.findViewById(R.id.PostRecycleView);
            filldate();
            recyclerView.setAdapter(adapter);
            recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
            return view;
        }
    
    public void filldate() {
    
        //Start Get And Set Json Into Card View
    
        final String KeyUrl="http://www.rasamdev.ir/salehin/GetPost.php";
        final String KeyUsername="Key";
        StringRequest stringRequest = new StringRequest(Request.Method.POST, KeyUrl, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Toast.makeText(getContext(),response, Toast.LENGTH_SHORT).show();
                //Start Pars
                if (response != null) {
                    try {
                        JSONObject jObject = new JSONObject(response);
                        JSONArray array = jObject.getJSONArray("Posts");
                        for (int i = 0; i < array.length(); i++) {
                            JSONObject object = array.getJSONObject(i);
                            String puid = object.getString("puid");
                            String Ptitr = object.getString("Ptitr");
                            String ptext = object.getString("ptext");
                            String pdate = object.getString("pdate");
                            String plike = object.getString("plike");
                            String pview = object.getString("pview");
                            String pimg = object.getString("pimg");
                            PostDataList.add(new PostData(pdate,ptext,puid,Ptitr,pimg,pview,plike));
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
    
                }
    
                //End Pars
    
    
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Toast.makeText(getActivity(), error + "", Toast.LENGTH_SHORT).show();
            }
        }){
    
            @Override
            protected Map<String, String> getParams() {
                HashMap<String, String> hashMap = new HashMap<>();
                hashMap.put(KeyUsername,"13581358r@R");
                return hashMap;
            }
    
        };
    
    
        RequestQueue requestQueue= Volley.newRequestQueue(this.getActivity());
        requestQueue.add(stringRequest);
    
        //End
    }
    
    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
    
    
    }
    
    
    @Override
    public void onResume() {
        adapter.notifyDataSetChanged();
        super.onResume();
    }