Hi,

When I try to remove the list element in my ArrayLilst I get
IndexOutofBoundsException. Specifically in OnItemLongClickListener.

Can anyone help ?

Thanks,

Graham

package listmodified.org;

import java.util.Arrays;
import java.util.ArrayList;
import android.app.ListActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.view.GestureDetector.OnGestureListener;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.widget.Toast;




public class listmodified extends ListActivity implements
OnGestureListener {
        public ArrayList<String> myList = new
ArrayList<String>(Arrays.asList(items));
        private TextView selection;  //  MAIN.xml
        public ArrayAdapter<String> adapter; // my adapter
        public OnItemLongClickListener itemDelListener;
        private GestureDetector gestureScanner;
        public int longClickedItem = 0;  //check if longClick is selected or
not
        private String itemSelected; // for delete function
        private static final byte UPDATE_LIST = 100;
        public AdapterView<?> parent; //used by OnLitemLongClickListener
        public int position;

        //tie items to an array list called myList
        public static  String[] items={"lorem", "ipsum", "dolor",
        "sit", "amet",
        "consectetuer", "adipiscing", "elit", "morbi", "vel",
        "ligula", "vitae", "arcu", "aliquet", "mollis",
        "etiam", "vel", "erat", "placerat", "ante",
        "porttitor", "sodales", "pellentesque", "augue", "purus"};
        @Override
        public void onCreate(Bundle icicle) {
        super.onCreate(icicle);


        //PART OF AdapterView.OnItemClickListener
        //PASS TO listener and catching the selection changes
        OnItemLongClickListener itemDelListener = new
OnItemLongClickListener(){

                //@Override
                public boolean onItemLongClick(AdapterView<?> parent, View arg1,
                                int position, long arg3) {
                        // TODO Auto-generated method stub
                        
itemSelected=parent.getItemAtPosition(position).toString();
                        adapter.remove(itemSelected);
                        Toast.makeText(listmodified.this, "position is:" + 
position,
Toast.LENGTH_SHORT).show();
                        myList.remove(position);
                        adapter.notifyDataSetChanged();

                        return false;
                }};

        setContentView(R.layout.main);


        //DEFINE MY OWN VIEW TIEW TO ARRAYLIST myList WHICH CONTAINS STRINGS
        adapter=new
ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,myList);
        setListAdapter(adapter);

        //A VIEW OF THE LIST NECESSARY FOR DELETION

        selection=(TextView)findViewById(R.id.selection);


        // PART OF LONG CLICK SELECTED CODE
        // CALLS IMPLEMENTED METHODS - detect gestures checking my list items
        gestureScanner = new GestureDetector(this);
        getListView().setOnTouchListener(new View.OnTouchListener() {
      @Override
    public boolean onTouch(View v, MotionEvent event) {
            return gestureScanner.onTouchEvent(event);
        }
    });

        //UPDATE VIEW DELETE WHEN ONLONG CLICK IS PRESSED
        getListView().setOnItemLongClickListener(itemDelListener);

        }


//LIST ITEM PRESS CHECKING
        public void onListItemClick(ListView parent, View v,
        int position, long id){
                selection.setText(myList.get(position));
                //check to see if LONGCLICK IS PRESSED
                if (longClickedItem != -1) {
                     Toast.makeText(listmodified.this, "A short click detected",
Toast.LENGTH_SHORT).show();

                }
                longClickedItem=0;
        }

//IMPLEMENTED BY GESTURE
        @Override
        public boolean onDown(MotionEvent arg0) {
                // TODO Auto-generated method stub
                return false;
        }


        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float
velocityX,
                        float velocityY) {
                // TODO Auto-generated method stub
                return false;
        }


//CHECKS ONLONGPRESS EVENTS SET LONG PRESS TO -1,
//COOL I CAN USE THIS TO SEE IF A LONG CLICK WAS SELECTED LATER ON

        @Override
        public void onLongPress(MotionEvent e) {
                                // TODO Auto-generated method stub
                Toast.makeText(listmodified.this, "A long click detected",
Toast.LENGTH_SHORT).show();


                if (e.getAction()==MotionEvent.ACTION_DOWN)
                {

                        longClickedItem = -1;

                }

        }


        @Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2, float
distanceX,
                        float distanceY) {
                // TODO Auto-generated method stub
                return false;
        }


        @Override
        public void onShowPress(MotionEvent e) {
                // TODO Auto-generated method stub

        }


        @Override
        public boolean onSingleTapUp(MotionEvent e) {
                // TODO Auto-generated method stub
                return false;
        }
        private Handler updateListHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case UPDATE_LIST:
            int position = msg.arg1;
                myList.remove(position);
                adapter.notifyDataSetChanged();
                Toast.makeText(listmodified.this, "OnSingleTapUp",
Toast.LENGTH_SHORT).show();
                break;

            }
            ;
        };
    };


        }

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to