【问题标题】:updating recycler view items from a different activity从不同的活动更新回收站视图项目
【发布时间】:2018-07-11 02:56:24
【问题描述】:

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

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

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

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

提前谢谢你

【问题讨论】:

  • 您传递给recyclerview适配器的数据列表与您在片段或活动中的列表不同。两个列表都是不同的副本。所以您必须更改适配器类列表上的数据然后 notifyDataSetChanged()

标签: android database android-recyclerview


【解决方案1】:

Fragment 仍然有 onResume 方法。在这里您可以更新数据集列表。 不要忘记更新 REcyclerView。

@Override
public void onResume() {
    super.onResume();

   //update whatever your list
   adapter.notifyDataSetChanged();
}

【讨论】:

  • adapter.notifyDataSetChanged() 不起作用,我不得不在 resume 上再次重置/设置适配器。我知道这不是最好的解决方案,但它现在有效。
【解决方案2】:

由于 Fragments 没有 OnRestart LifeCycle ,所以可以这样使用,

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

  }
}

【讨论】:

    【解决方案3】:

    您可以将LiveData 用于 Recyclerview。数据源发生变化时会自动更新recyclerview。

    【讨论】:

    • 我也在使用实时数据,它仍然没有更新
    • 然后检查您的 livedata 的更改功能是否有效
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多