【发布时间】:2017-11-29 19:45:45
【问题描述】:
我不明白以下内容。 我在调用 parseJSON() 之前创建了 Adapter 并为其设置了一个新的空 ArrayList。我不调用 notifyDataSetChanged 并且仍然显示项目。为什么不是空的?
public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private ExampleAdapter mAdapter;
private ArrayList<ExampleItem> mExampleList;
private RequestQueue mRequestQueue;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = findViewById(R.id.recycler_view);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mExampleList = new ArrayList<>();
mAdapter = new ExampleAdapter(MainActivity.this, mExampleList);
mRecyclerView.setAdapter(mAdapter);
mRequestQueue = Volley.newRequestQueue(this);
parseJSON();
}
private void parseJSON() {
String url = "https://pixabay.com/api/?key=5303976-fd6581ad4ac165d1b75cc15b3&q=kitten&image_type=photo&pretty=true";
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray jsonArray = response.getJSONArray("hits");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject hit = jsonArray.getJSONObject(i);
String userName = hit.getString("user");
String imageUrl = hit.getString("webformatURL");
int likeCount = hit.getInt("likes");
mExampleList.add(new ExampleItem(imageUrl, userName, likeCount));
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
mRequestQueue.add(request);
}
}
另外在这里设置适配器的合适位置在哪里?我应该在解析数据后直接在 parseJSON 方法中设置它吗?还是应该像现在这样设置,然后调用 notifyDataSetChanged?
【问题讨论】:
标签: android json android-recyclerview android-volley