更新来自不同活动的回收者视图项目

时间:2018-07-11 02:56:25

标签: android database android-recyclerview recycler-adapter

我正在尝试更新/刷新来自不同活动的回收者视图数据。

我的设置是,我有一个片段运行的回收站视图。单击回收者视图项将打开一个新活动,用户可以在其中进行更新,并将数据保存在数据库中。然后返回(onBackClicked)到片段,回收者视图不会更新。但是,数据已保存,因此如果我关闭应用程序并重新启动更新,则会显示该信息。

有人可以指导我如何继续解决这个问题。

注意:我正在使用观察者来观察回收者视图的项目,但是由于更新是在不同的活动中进行的,因此回收者视图不会更新。如果我在不打开新活动的情况下从同一片段进行更新,则观察者会工作。

提前谢谢

4 个答案:

答案 0 :(得分:2)

片段仍然具有onResume方法。您可以在此处更新数据集列表。 不要忘记更新REcyclerView。

{{1}}

答案 1 :(得分:0)

由于片段没有OnRestart LifeCycle,您可以像这样使用

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
  super.setUserVisibleHint(isVisibleToUser);
  if (isVisibleToUser) {
    //refresh recycleradapter with notifydatasetchanged here
    //recyclerAdapter.notifyDataSetChanged();

  }
}

答案 2 :(得分:0)

您可以将LiveData用于Recyclerview。数据源更改时,它将自动更新recyclerview。

答案 3 :(得分:0)

我将Recycler View放入片段活动中,其中包含许多Card View项目 但是,当我单击“刷新”按钮时,这些项目是第一次创建的

当下次加载Fragment时,不会再次获取这些项目,而这仅是第一次进行。

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();
}