片段实现中的回收者视图

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

我已经在常规活动(不是片段)中成功实现了回收站视图,片段中的问题是,似乎PostsList似乎没有填充在OnViewCreated()方法中(arraySize为0)。但是,当我使用getPosts()JSON方法记录PostsList数组大小时,正在正确记录数组大小。当我从OnViewCreated()调用它时,似乎没有填充PostsList。问题是什么,我该如何解决,这样我才能将postsList发送到回收者视图适配器?

片段

`{// TODO:重命名参数参数,选择匹配的名称//片段初始化参数,例如ARG_ITEM_NUMBER私有静态最终字符串ARG_PARAM1 =“ param1”;私有静态最终字符串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-studio android-fragments android-volley
1个回答
0
投票

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

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