emen
emen

Reputation: 6328

Can't populate JSON to ListView

I'm using Volley and GSON to parse a remote JSON. Here is my Fragment that does it:

public class LatestFragment extends ListFragment implements OnScrollListener {
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        arrItemList = new ArrayList<ItemListModel>();
        va = new LatestAdapter(getActivity(), arrItemList);

        lv = getListView();
        setListAdapter(va);
        lv.setOnScrollListener(this);

        loadItemList(1);
    }

    private void loadItemList(int page) {
        mRequestQueue = Volley.newRequestQueue(getActivity());

        GsonRequest<LatestContainer> myReq = new GsonRequest<LatestContainer>(
                Method.GET, url, LatestContainer.class,
                createMyReqSuccessListener(), createMyReqErrorListener());

        mRequestQueue.add(myReq);
    }


    private Response.Listener<LatestContainer> createMyReqSuccessListener() {
        return new Response.Listener<LatestContainer>() {
            @Override
            public void onResponse(LatestContainer response) {
                try {

                    for (int i = 0; i < response.getResults().size(); i++) {

                        ItemListModel ilm = new ItemListModel();
                        ilm.setCategory(response.getResults().get(i).getCategory());
                        ilm.setItem_id(response.getResults().get(i).getItem_id());
                        ilm.setName(response.getResults().get(i).getName());
                        ilm.setPrice(response.getResults().get(i).getPrice());
                        ilm.setUser_id(response.getResults().get(i).getUser_id());

                        arrItemList.add(ilm);


}

LatestAdapter

public class LatestAdapter extends BaseAdapter {
    public LatestAdapter(Context context, ArrayList<ItemListModel> items) {
        this.arrItemList = items;
        this.context = context;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {

        ViewHolder vh;
        lf = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        if (view == null) {
            vh = new ViewHolder();
            view = lf.inflate(R.layout.row_latest_listview, null);
            vh.tvName = (TextView) view.findViewById(R.id.txtItemName);
            vh.tvCategory = (TextView) view.findViewById(R.id.txtCategory);
            vh.tvPrice = (TextView) view.findViewById(R.id.txtPrice);
            vh.tvThumbnail = (ImageView) view.findViewById(R.id.imgPhoto);
            view.setTag(vh);
        } else {
            vh = (ViewHolder) view.getTag();
        }

        ItemListModel nm = arrItemList.get(i);
        vh.tvCategory.setText(nm.getCategory());
        vh.tvPrice.setText("RM " + nm.getPrice());
        vh.tvName.setText(nm.getName());

        return view;
    }

However, after I run the code, the listview doesn't seem to be populated. But the parsing is successful. I can see the parsed string in the logcat. So deserialization is not an issue here. What did I do wrong now?

Upvotes: 0

Views: 111

Answers (1)

Elad Nava
Elad Nava

Reputation: 7896

Make sure you call va.notifyDataSetChanged() after modifying the adapter's dataset.

Upvotes: 2

Related Questions