我已经在常规活动(不是片段)中成功实现了回收站视图,片段中的问题是,似乎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);
}
}`
成功获取api后,您应在添加列表项之后调用recyclerView.getAdapter().notifyDataSetChanged()
。