我有一个BottomNavigationView
显示Fragments
,在我的第一个片段中,我使用 volley 来获取 JSON 数据并将其填充RecyclerView
如下:
private void loadRecyclerViewData() {
StringRequest stringRequest = new StringRequest(Request.Method.GET,
URL_DATA,
new Response.Listener<String>() {
@Override
public void onResponse(String s) {
bar.setVisibility(View.GONE);
try {
JSONArray array = new JSONArray(s);
for (int i = 0; i < array.length(); i++) {
JSONObject o = array.getJSONObject(i);
ListItem item = new ListItem(
o.getString("name"),
o.getString("bio"),
o.getString("imageurl")
);
listItems.add(item);
}
adapter = new MyAdapter(listItems, getContext());
rv.setAdapter(adapter);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
bar.setVisibility(View.GONE);
Toast.makeText(getContext(), volleyError.getMessage(), Toast.LENGTH_LONG).show();
}
});
RequestQueue requestQueue = Volley.newRequestQueue(getContext());
requestQueue.add(stringRequest);
}
以上在我的片段中被调用onCreateView
。
它会像我想要的那样显示,但是,这就是问题所在。当我转到另一个片段并返回(通过使用BottomNavigationView
)时,onCreateView
将再次调用,数据将再次加载。
一个很好的例子是 YouTube 和 Instagram 应用程序,在这些应用程序中,每次切换视图时都不会重新加载数据。
我的问题:
如何在BottomNavigationView
不调用的情况下在片段之间导航onDestroyView
,或者是否有另一种方法可以避免我遇到的问题?
这是一个类似的问题。
编辑 1:为问题添加更多上下文
选择内部的项目时,BottomNavigationView
它会夸大/替换片段,从而onCreateView
被调用。我的方法在内部被调用onCreateView
,这意味着每次我在片段之间“切换”时,我的方法都会被再次调用,导致 Volley 再次获取数据。