Search code examples
android-activityonclicklistenerlistactivityonlongclicklistener

How to use onClick and onLongPress in ListActivity?


I want to create a listview from which we can use onclick and in which on long press a Context menu comes out. the code is

public class MainActivity extends ListActivity{

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        String quizlist[]={"Normal","MCQ 2 Options","MCQ 3 options","MCQ 4 Options"};
        ArrayAdapter<String> ab=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,quizlist);
        setListAdapter(ab);
    }
}    

Thanks in advance


Solution

  • You can register an AdapterView.OnItemLongClickListener on the ListView. So what you need to do is find the list view:

    in onCreate try

    ((ListView) getView).setOnItemLongKlickListener(...)
    

    or

    ((ListView) findViewById(<the id of your list view>).setOnItemLongKlickListener(...)
    

    When implementing an OnItemLongClickListener you will have to override the onItemLongClick method:

    From the documentation:

    public abstract boolean onItemLongClick (AdapterView<?> parent, View view, int position, long id)
    

    Added in API level 1 Callback method to be invoked when an item in this view has been clicked and held. Implementers can call getItemAtPosition(position) if they need to access the data associated with the selected item.

    Parameters 
    parent      The AbsListView where the click happened 
    view        The view within the AbsListView that was clicked 
    position    The position of the view in the list 
    id          The row id of the item that was clicked
    
    Returns true if the callback consumed the long click, false otherwise
    

    So, parent is your ListView. view is the view of the *long clicked' list item. position is the position inside the list and thus also the position in your array. For id I am not sure whether the default implementations returns a constant or the position.