myown email
myown email

Reputation: 139

Listview not updating based on value on Array Adapter

I call the method below to update my listview

ListView list = (ListView) listView.findViewById(R.id.plan_list);
itemsList = sortAndAddSections(getItems_search(name));
ListAdapter adapter = new ListAdapter(getActivity(), itemsList);
list.setAdapter(adapter);

but that code is associated with a value that changes and also this is the other code

private ArrayList<plan_model> getItems_search(String param_cusname) {
    Cursor data = myDb.get_search_plan(pattern_email, param_name);
    int i = 0;
    while (data.moveToNext()) {
        String date = data.getString(3);
        String remarks = data.getString(4);
        items.add(new plan_model(cusname, remarks);
    }
    return items;
}

and this is my sorter

private ArrayList sortAndAddSections(ArrayList<plan_model> itemList) {

        Collections.sort(itemList);
        plan_model sectionCell;

        tempList.clear();
        tmpHeaderPositions.clear();

        String header = "";
        int addedRow = 0;
        int bgColor = R.color.alt_gray;
        for (int i = 0; i < itemList.size(); i++) {

            String remarks = itemList.get(i).getRemarks();
            String date = itemList.get(i).getDate();

            if (!(header.equals(itemList.get(i).getDate()))) {
                sectionCell = new plan_model(remarks, date);
                sectionCell.setToSectionHeader();
                tmpHeaderPositions.add(i + addedRow);
                addedRow++;
                tempList.add(sectionCell);
                header = itemList.get(i).getDate();
                bgColor = R.color.alt_gray;
            }
            sectionCell = itemList.get(i);
            sectionCell.setBgColor(bgColor);
            tempList.add(sectionCell);
            if (bgColor == R.color.alt_gray) bgColor = R.color.alt_white;
            else bgColor = R.color.alt_gray;
        }

        tmpHeaderPositions.add(tempList.size());
        for (int i = 0; i < tmpHeaderPositions.size() - 1; i++) {
            sectionCell = tempList.get(tmpHeaderPositions.get(i));
            sectionCell.setDate(sectionCell.getDate() + " (" +
                    (tmpHeaderPositions.get(i + 1) - tmpHeaderPositions.get(i) - 1) + ")");
        }

        return tempList;
    }

my question is the value name changes but my listview is not how can I update my listview? because i need to update it based on search parameter

Upvotes: 0

Views: 49

Answers (2)

user8959091
user8959091

Reputation:

In getItems_search() add this line at the beginning:

items.clear();

Every time the value of name changes you have to do the following:

itemsList.clear();
itemsList = sortAndAddSections(getItems_search(name));
list.setAdapter(new ListAdapter(getActivity(), itemsList));

Upvotes: 0

Alan Raso
Alan Raso

Reputation: 263

If your itemList is being updated properly, you don't need to create another instance of the adapter, just use notifyDataSetChanged():

private void createList() {
    ListView list = (ListView) listView.findViewById(R.id.plan_list);
    itemsList = sortAndAddSections(getItems_search(name));
    adapter = new ListAdapter(getActivity(), itemsList);
    list.setAdapter(adapter);
}

private void updateList() {
    sortAndAddSections(getItems_search(name)); // Update itemList without re-assign its value, otherwise the adapter will loose reference
    adapter.notifyDataSetChanged()
}

Upvotes: 1

Related Questions