片段实现中的RecyclerView

问题描述 投票:0回答:1

我已经在常规活动(不是片段)中成功实现了RecyclerView,片段中的问题是PostsList似乎没有填充在OnViewCreated()方法中(arraySize为0)。但是,当我从PostsList JSON方法中记录getPosts()数组大小时,正在正确记录数组大小。

当我从PostsList调用它时,似乎没有填充OnViewCreated()

问题是什么,如何解决,以便可以将postsList发送到RecyclerView适配器?

片段:

{
    // TODO: Rename parameter arguments, choose names that match
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";

    // TODO: Rename and change types of parameters
    private String mParam1;
    private String mParam2;

    private OnFragmentInteractionListener mListener;



    RecyclerView recyclerView;
    ArrayList<Post> PostsList = new ArrayList<>();
    String userId = "4b248ae2-7d0d-47f6-bc01-3c6ee12cb10e";


    public void nameClicked(View view){
        Log.i("NAME", "name Clicked");
    }


    public Tab2() {

    }


    // TODO: Rename and change types and number of parameters
    public static Tab2 newInstance(String param1, String param2) {
        Tab2 fragment = new Tab2();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);
        }



    }

    public void getPosts(String id) {



        String url = "http://10.0.2.2:5000/api/posts/postf?id="+id;
        RequestQueue queue = Volley.newRequestQueue(getActivity().getApplicationContext());
        JsonArrayRequest jsonRequest = new JsonArrayRequest(Request.Method.GET, url, null,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray ja) {
                        try {
                            for (int i = 0; i < ja.length(); i++) {
                                JSONObject o = ja.getJSONObject(i);
                                int id = Integer.parseInt(o.getString("id"));
                                String text = o.getString("text");
                                String applicationUserId = o.getString("applicationUserId");
                                String image = o.getString("image");
                                int likes = Integer.parseInt(o.getString("likes"));
                                String date = o.getString("dateTime");
                                double latitude =Double.parseDouble(o.getString("latitude"));
                                double longitude =Double.parseDouble(o.getString("latitude"));
                                String locatonImage = o.getString("locationImage");

                                PostsList.add(new Post(id, text,applicationUserId,image,likes,date,latitude,longitude,locatonImage));

                                Log.i("length",Integer.toString(PostsList.size()));

                            }

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Log.i("error errrrrrrr", error.toString());
                    }
                });
        queue.add(jsonRequest);



    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_tab2, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        getPosts("4b248ae2-7d0d-47f6-bc01-3c6ee12cb10e");
        recyclerView = view.findViewById(R.id.recyclerView);
        FeedAdapter myAdapter = new FeedAdapter(view.getContext(),PostsList);
        recyclerView.setAdapter(myAdapter);
        recyclerView.setLayoutManager(new LinearLayoutManager(this.getContext()));
        Log.i("ArrayLength", Integer.toString(PostsList.size()));



    }


    public void onButtonPressed(Uri uri) {
        if (mListener != null) {
            mListener.onFragmentInteraction(uri);
        }
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof OnFragmentInteractionListener) {
            mListener = (OnFragmentInteractionListener) context;
        } else {
            throw new RuntimeException(context.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }

    public interface OnFragmentInteractionListener {
        // TODO: Update argument type and name
        void onFragmentInteraction(Uri uri);
    }
}
android android-fragments android-recyclerview android-volley
1个回答
0
投票

成功获取api后,您应在循环外添加列表项之后调用recyclerView.getAdapter().notifyDataSetChanged()

© www.soinside.com 2019 - 2024. All rights reserved.