【发布时间】:2018-03-26 21:04:12
【问题描述】:
我在片段中有一个 RecyclerView,它负责显示 JSON 数据,一切正常,但它只显示 JSON 的前两项。我尝试通过敬酒来检查列表的大小,但它似乎工作正常,因为它显示 4。
我还检查了我所有的 XML 文件以查看已设置为 wrap_content 的布局的属性。
这是我在 onCreateView 中的代码
program_list = view.findViewById(R.id.program_list);
program_list.setHasFixedSize(true);
program_list.setLayoutManager(new LinearLayoutManager(getActivity()));
program_list.setNestedScrollingEnabled(false);
listItems = new ArrayList<>();
program_adapter = new Program_Adapter(listItems,getActivity());
program_list.setAdapter(program_adapter);
program_progress = view.findViewById(R.id.program_progress);
StringRequest stringRequest = new StringRequest(Request.Method.GET,
program_data,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
program_progress.setVisibility(View.GONE);
try {
JSONObject json = new JSONObject(response);
JSONArray array = json.getJSONArray("programs");
listItems.clear();
for(int i = 0; i < array.length(); i++){
JSONObject o = array.getJSONObject(i);
Program_Item item = new Program_Item(
o.optString("name"),
o.optString("channel"),
o.optString("description"),
o.optLong("timings"),
o.optString("logo")
);
listItems.add(item);
}
Toast.makeText(getActivity(), "Size " + listItems.size(), Toast.LENGTH_SHORT).show();
program_adapter.notifyDataSetChanged();
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
program_progress.setVisibility(View.GONE);
Toast.makeText(getActivity(), error.getMessage(), Toast.LENGTH_SHORT).show();
}
});
RequestQueue requestQueue = Volley.newRequestQueue(getActivity());
requestQueue.add(stringRequest);
这是我的适配器
public class Program_Adapter extends RecyclerView.Adapter<Program_Adapter.ViewHolder> {
View v;
private List<Program_Item> listItems;
private Context context;
public Program_Adapter(List<Program_Item> listItems, Context context) {
this.listItems = listItems;
this.context = context;
}
@Override
public Program_Adapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.program_card, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(Program_Adapter.ViewHolder holder, int position) {
final Program_Item item = listItems.get(position);
holder.program_name.setText(item.getName());
holder.program_channel.setText(item.getNetwork());
holder.program_description.setText(item.getDescription());
Glide.with(context)
.load(item.getLogo())
//.thumbnail(0.9f)
//.placeholder(R.drawable.ic_image)
.into(holder.program_logo);
holder.card_body.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
item.getTimings();
}
});
}
@Override
public int getItemCount() {
return listItems.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
public TextView program_name,program_channel,program_description;
public ImageView program_logo;
public LinearLayout card_body;
public ViewHolder(View itemView) {
super(itemView);
program_channel = (TextView) itemView.findViewById(R.id.program_channel);
program_description = (TextView) itemView.findViewById(R.id.program_description);
program_name = (TextView) itemView.findViewById(R.id.program_name);
program_logo = (ImageView) itemView.findViewById(R.id.program_logo);
card_body = (LinearLayout) itemView.findViewById(R.id.program_card_body);
}
}
}
【问题讨论】:
-
代码看起来不错。固定大小为 4 的
ArrayList怎么样,只是为了尝试一下 -
@ruben 评论了修复arraylist大小的声明仍然没有区别
-
我认为您没有将更新后的列表传递给适配器
标签: android json android-recyclerview