Q:

Arraylist elements being repeated after the last index

The problems I am facing are -
1.I have a Custom Grid View.  The Adapter for the view inflates items for only five elements but while displaying the list repeats itself after the last index. 
For example if there are only 5 elements in the adapter, while displaying it becomes 10 or 15 and then when I click on any item it shows outOfBoundException. 
2.When the sub button is clicked,it should decrease the number of items by one.  Sometimes, it just doesn't.  I cannot figure out the reason.  Add button works perfectly. 
public class MyAdaptertwo extends BaseAdapter
{
public static List<Item> items = new ArrayList<Item>();
private LayoutInflater inflater;
 int j;
int k=0;
public static int no[]=new int[5];
public static int co[]=new int[5];
public static int cos[]={1,2,3,4,5};

public static List<list> rowitems = new ArrayList<list>();
static int size=0;

public MyAdaptertwo(Context context)
{
    inflater = LayoutInflater.from(context);

    items.add(new Item("S", R.drawable.s,"1",R.drawable.v));
    items.add(new Item("F", R.drawable.t,"2",R.drawable.v));
    items.add(new Item("C",R.drawable.c,"3",R.drawable.n));
    items.add(new Item("P", R.drawable.i,"4",R.drawable.v));
    items.add(new Item("P", R.drawable.p,"5",R.drawable.n));
}

@Override
public int getCount() {
    return items.size();
}

@Override
public Object getItem(int i)
{
    j=i;
    return items.get(i);
}
public void setCost(int i,String a)
{
    items.get(i).cost=a;
}

@Override
public long getItemId(int i)
{
    return items.get(i).colorId;
}

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

    View v = view;
    ImageView picture;
    ImageView vn;
    TextView name;
    TextView costs;

    if(v == null)
    {
        v = inflater.inflate(R.layout.gridview_item, viewGroup, false);
        v.setTag(R.id.picture, v.findViewById(R.id.picture));
        v.setTag(R.id.vnon, v.findViewById(R.id.vnon));
        v.setTag(R.id.text, v.findViewById(R.id.text));
        v.setTag(R.id.cost,v.findViewById(R.id.cost));
    }

    picture = (ImageView)v.getTag(R.id.picture);
    vn=(ImageView)v.getTag(R.id.vnon);
    name = (TextView)v.getTag(R.id.text);
    costs=(TextView)v.getTag(R.id.cost);

    Item item = (Item)getItem(i);

    picture.setImageResource(item.colorId);
    name.setText(item.name);
    costs.setText(item.cost);
    vn.setImageResource(item.vnId);
      Button add=(Button)v.findViewById(R.id.add);
    add.setOnClickListener(new View. OnClickListener() {

        @Override
        public void onClick(View v) {
            if (size == 0) {
                Log.e("first j-1",Integer.toString(j-1));
                no[j - 1] = no[j - 1] + 1;
                Log.e("first no[j-1]",Integer.toString(no[j-1]));
                list item = new list(items.get(j - 1).colorId, items.get(j - 1).name, Integer.toString(co[j-1]), Integer.toString(no[j - 1]));
                rowitems.add(item);

                Log.e("n", Integer.toString(no[j - 1]));
                size++;
                Log.e("first size",Integer.toString(size));
            }
            else {
                int y = 0, pos = 0;
                for (int i = 0; i < size; i++) {
                    if ((rowitems.get(i).title).equals((items.get(j - 1).name))) {
                        y = 1;
                        pos = i;
                    }
                }
                if (y == 1) {
                    Log.e("else j-1",Integer.toString(j-1));
                    no[j - 1] = no[j - 1] + 1;
                    Log.e("else no[j-1]",Integer.toString(no[j-1]));
                    rowitems.get(pos).no =Integer.toString(1+Integer.parseInt(rowitems.get(pos).no));

                   String s= rowitems.get(pos).cost;
                    int c=Integer.parseInt(s);
                    c=c+cos[j-1];
                    Log.e("C", Integer.toString(c));
                    //co[j-1]=c;
                    rowitems.get(pos).cost=Integer.toString(c);
                    Log.e("else co[j-1]", Integer.toString(co[j - 1]));
                    Log.e("else c",Integer.toString(c));
                    Log.e("else size",Integer.toString(size));
                }
                else {
                    Log.e("else else j-1",Integer.toString(j-1));
                    no[j - 1] = no[j - 1] + 1;
                    Log.e("else else no[j-1]",Integer.toString(no[j-1]));
                    list item = new list(items.get(j - 1).colorId, items.get(j - 1).name, Integer.toString(co[j-1]), Integer.toString(no[j - 1]));
                    rowitems.add(item);
                   /* String s=items.get(j-1).cost.toString();
                    int c=Integer.parseInt(s);
                    c=c+(c/no[j-1]);
                    setCost(j-1,Integer.toString(c));
                    MyAdaptertwo.this.notifyDataSetChanged();*/

                    size++;
                    Log.e("else else size",Integer.toString(size));
                }
            }

        }
    });
   Button sub=(Button)v.findViewById(R.id.sub);
    sub.setOnClickListener(new View. OnClickListener() {

        @Override
        public void onClick(View v) {
            if (size > 0) {
                Log.e("if size ",Integer.toString(size));
                int y = 0, pos = 0;
                for (int i = 0; i < size; i++) {
                    Log.e("if i ",Integer.toString(i));
                    Log.e("if j-1 ",Integer.toString(j-1));
                    if ((rowitems.get(i).title).equals((items.get(j - 1).name))) {
                        y = 1;
                        pos = i;
                        Log.e("title",rowitems.get(i).title);
                        Log.e("name",items.get(j-1).name);
                        Log.e("if pos ",Integer.toString(pos));
                    }
                }
                if (y == 1) {
                    no[j - 1] = no[j - 1] - 1;
                    Log.e("y==1 no[j-1] ",Integer.toString(no[j-1]));
                    rowitems.get(pos).no = Integer.toString(Integer.parseInt(rowitems.get(pos).no)-1);
                    Log.e("row no",   rowitems.get(pos).no);
                    String s= rowitems.get(pos).cost;
                    int c=Integer.parseInt(s);
                    c=c-cos[j-1];
                    Log.e("C", Integer.toString(c));
                    //co[j-1]=c;
                    rowitems.get(pos).cost=Integer.toString(c);
                    Log.e("else co[j-1]", Integer.toString(co[j - 1]));
                    Log.e("else c",Integer.toString(c));
                    Log.e("else size",Integer.toString(size));
                    if (no[j - 1] <= 0) {
                        if (size == 1) {
                            size = 0;
                            rowitems.clear();
                        } else if (size > 1) {
                            rowitems.remove(pos);

                        }
                    }
                }
            }

        }
    });
    return v;
}

private class Item
{
    final String name;
    final int colorId;
     String cost;
    final int vnId;

    Item(String name, int drawableId,String cost,int vnId)
    {
        this.name = name;
        this.colorId = drawableId;
        this.cost=cost;
        this.vnId=vnId;
       }
}

}
Xml file
<? xml version="1.0" encoding="utf-8"? >

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFF">
<com.food.foodjugaad. SquareImageView
    android:id="@+id/picture"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scaleType="centerCrop"
    android:padding="5dp"
    />
<TextView
    android:id="@+id/text"
    android:layout_below="@+id/picture"
    android:layout_width="300dp"
    android:layout_height="wrap_content"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:paddingTop="5dp"
    android:paddingBottom="5dp"
    android:layout_gravity="bottom"
    android:textColor="@android:color/black"
     />
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Rs." 
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:paddingTop="5dp"
    android:paddingBottom="5dp"
    android:layout_gravity="bottom"
    android:textColor="@android:color/black"
    android:layout_below="@+id/text"
    android:id="@+id/rs"
   />
<TextView
    android:id="@+id/cost"
    android:layout_below="@+id/text"
    android:layout_width="210dp"
    android:layout_height="wrap_content"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:paddingTop="5dp"
    android:paddingBottom="5dp"
    android:layout_gravity="bottom"
    android:textColor="@android:color/black"
    android:layout_toRightOf="@+id/rs"
    />
<ImageView
    android:layout_width="wrap_content"
    android:layout_height="40dp"
    android:layout_marginLeft="5dp"
    android:layout_toRightOf="@+id/text"
    android:layout_below="@+id/picture"
    android:id="@+id/vnon"/>
<Button
    android:layout_width="50dp"
    android:layout_height="20dp"
    android:text="+"
    android:textColor="#FFF"
    android:layout_below="@+id/vnon"
    android:layout_toRightOf="@+id/cost"
    android:id="@+id/add"
    android:background="@drawable/button_back"/>
<Button
    android:layout_width="30dp"
    android:layout_height="20dp"
    android:text="-"
    android:id="@+id/sub"
    android:textColor="#FFF"
    android:layout_below="@+id/vnon"
    android:background="@drawable/button_background"
    android:layout_toRightOf="@+id/add"/>

   </RelativeLayout>

Logcat - 
  Reconstruct Branch: AU_LINUX_ANDROID_LA.BF.1.1.1_RB1.05.00.02.042.016 +       62ca4eb + acd831d + 9f8b442 + e027a02 + cba30ba + 53c303a + a649d79 + 23e16f8 + 5e97da7 + cbd2a44 + 33d072a + 7aacf06 + 72b33e7 + 28f6f60 + b4c13d8 +  NOTHING
  12-28 16:24:28.585  15183-15204/com.food.foodjugaad I/OpenGLRenderer﹕ Initialized EGL, version 1.4
  12-28 16:24:28.607  15183-15204/com.food.foodjugaad D/OpenGLRenderer﹕ Enabling debug mode 0
   12-28 16:24:34.981  15183-15204/com.food.foodjugaad D/OpenGLRenderer﹕ endAllStagingAnimators on 0xb8017500 (GridView) with handle 0xb80994e0
    12-28 16:24:36.571  15183-15183/com.food.foodjugaad E/first j-1﹕ 0
   12-28 16:24:36.571  15183-15183/com.food.foodjugaad E/first no[j-1]﹕ 1
    12-28 16:24:36.572  15183-15183/com.food.foodjugaad E/n﹕ 1
    12-28 16:24:36.572  15183-15183/com.food.foodjugaad E/first size﹕ 1
    12-28 16:24:37.304  15183-15183/com.food.foodjugaad E/else j-1﹕ 0
   12-28 16:24:37.304  15183-15183/com.food.foodjugaad E/else no[j-1]﹕ 1
  12-28 16:24:37.304  15183-15183/com.food.foodjugaad E/C﹕ 2
    12-28 16:24:37.304  15183-15183/com.food.foodjugaad E/else co[j-1]﹕ 1
   12-28 16:24:37.304  15183-15183/com.food.foodjugaad E/else c﹕ 2
    12-28 16:24:37.304  15183-15183/com.food.foodjugaad E/else size﹕ 1
      12-28 16:24:39.759  15183-15183/com.food.foodjugaad E/else else j-1﹕ 3
      12-28 16:24:39.759  15183-15183/com.food.foodjugaad E/else else no[j-1]﹕ 1
     12-28 16:24:39.759  15183-15183/com.food.foodjugaad E/else else size﹕ 2
      12-28 16:24:41.229  15183-15183/com.food.foodjugaad E/else else j-1﹕ 2
       12-28 16:24:41.229  15183-15183/com.food.foodjugaad E/else else no[j-1]﹕ 1
        12-28 16:24:41.229  15183-15183/com.food.foodjugaad E/else else size﹕ 3
        12-28 16:24:42.196  15183-15204/com.food.foodjugaad D/OpenGLRenderer﹕ endAllStagingAnimators on 0xb81a6018 (RippleDrawable) with handle 0xb82722f8

A:

You should remove the static when you declare your ArrayList and also I recommend you to use private instead of public
public static List<Item> items = new ArrayList<Item>();

to
 private List<Item> items = new ArrayList<Item>();

The reason is: The static variable belongs to the class, not any particular object of that class.  It will not release so every time you create the your Adapter the list will keep increase.  It is really bad for performance
Hope this help

