Custom listview repeats itself everytime activity resumes (android)

Viewed 102

I'm having this issue with my android custom listview such that everytime i exit the activity (i.e. click the "back" button on emulator), then return back to the same activity that contains this custom listview, the listview adds an additional row to itself.

For example, originally it is:

item a

When I leave that activity and come back to it, the row doubles:

item a
item a

However, when i restart the emulator again, the custom listview goes back to the original number of data retrieved from sqlite.

How do I stop the rows from doubling themselves? Here are my codes.

list.java:

//DATABASE
    MyItems mi;
    //For Items display - ArrayList
    private ArrayList<SalesItemInformationLV> displayiteminfo;
           /* new ArrayList<SalesItemInformationLV>(); */
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list_sale_item);



        final float sellingpvalue = 13.5f;
        final float costpvalue = 19.0f;
        final String datesoldvalue = "9/9/1995";
        final String staffdiscountvalue = "true";

        mi = MyItems.getInstance();
        displayiteminfo = mi.retrieveAllForlist(getApplicationContext());



        //New array adapter for customised ArrayAdapter
        final ArrayAdapter<SalesItemInformationLV> adapter = new itemArrayAdapter(this, 0, displayiteminfo);
        //displayiteminfo - the ArrayList of item objects to display.

        //Find the list view, bind it with custom adapter
        final ListView listView = (ListView)findViewById(R.id.customListview);
        listView.setAdapter(adapter);
       // listView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 9));

        //LONG PRESS CONTEXT MENU
        registerForContextMenu(listView);

        //Selecting the listview item!
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                SalesItemInformationLV saleitem = displayiteminfo.get(position);
                String namevalue = saleitem.getItemname();
                int qtyvalue = saleitem.getItemquantity();

                Intent myintent = new Intent(ListSaleItemActivity.this, ViewSaleDetails.class);
                myintent.putExtra("itemname", namevalue);
                myintent.putExtra("itemqty", qtyvalue);
                myintent.putExtra("itemcp", costpvalue);
                myintent.putExtra("itemsp", sellingpvalue);
                myintent.putExtra("itemds", datesoldvalue);
                myintent.putExtra("itemsstaffdis", staffdiscountvalue);

                startActivity(myintent);

            }
        });



    }



    //custom Arrayadapter
    class itemArrayAdapter extends ArrayAdapter<SalesItemInformationLV>
    {
        private  Context context;
        private List<SalesItemInformationLV> item;



        //constructor, call on creation
        public itemArrayAdapter(Context context, int resource, ArrayList<SalesItemInformationLV> objects) {

            //chaining to "default constructor" of ArrayAdapter manually
            super(context, resource, objects);
            this.context = context;
            this.item = objects;

        }

        //called to render the list

        public View getView(int position, View convertView, ViewGroup parent)
        {


            //get the item we are displaying
            SalesItemInformationLV iteminfo = item.get(position);

            //get the inflater and inflate the xml layout for each item
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
            View view = inflater.inflate(R.layout.item_layout, null);


            //Each component of the custom item_layout
            TextView name = (TextView) view.findViewById(R.id.ItemNameSales);
            TextView qty = (TextView)view.findViewById(R.id.ItemNameQty);

            //set the name of item - access using an object!
            name.setText(String.valueOf(iteminfo.getItemname()));

            //set the quantity of item - access using an object!
            qty.setText(String.valueOf(iteminfo.getItemquantity()));

            return view;
            //Now return to onCreate to use this cuztomized ArrayAdapter


        }
    }

Myitems.java:

public class MyItems extends Application {

    //ID and contact information
    private List<String> contactList;
    private List<Integer> contactIdList;
    private  static MyItems ourInstance = new MyItems();

    //Populate SaleItemInformationLV
    private ArrayList<SalesItemInformationLV> displayiteminfo2 =
            new ArrayList<SalesItemInformationLV>();

    public  MyItems()
    {
        contactList = new ArrayList<String>();
        contactIdList = new ArrayList<Integer>();
    }

    public  static  MyItems getInstance(){
        return ourInstance;
    }
//RETRIEVE ALL ENTRIES
    //LISTVIEW
    public  ArrayList<SalesItemInformationLV> retrieveAllForlist(Context c)
    {
        Cursor myCursor;
        String mystring = "";

        MyDbAdapter db = new MyDbAdapter(c);
        db.open();
        //contactIdList.clear();
        //contactList.clear();
        myCursor = db.retrieveAllEntriesCursor();

        if (myCursor !=null && myCursor.getCount()>0)
        {
            myCursor.moveToFirst();
            do {

                displayiteminfo2.add(new SalesItemInformationLV(myCursor.getString(db.COLUMN_NAME_ID), db.COLUMN_QTYSOLD_ID));

            } while (myCursor.moveToNext());
        }
        db.close();
        return  displayiteminfo2;
    }
2 Answers
Related