0

Below is my code for setting up a listview. I want to implement a click event on the listview, but it is not working. I have set the clickable attribute for the listview in the manifest. Also my listview is located inside a relative layout, and this relative layout is located in a linear layout. My list_details has the textview and imageview in a relative layout. Could you please help me in figuring this out. Thanks in advance.

public class ListImageBaseAdapter extends BaseAdapter {
...

public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
    if (convertView == null) {
        convertView = l_Inflater.inflate(R.layout.list_details, null);
        holder = new ViewHolder();
        holder.txt_itemName = (TextView) convertView.findViewById(R.id.name);
        holder.itemImage = (ImageView) convertView.findViewById(R.id.photo);

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

        System.out.println(titles.length);

        holder.txt_itemName.setText(titles[position]);
        holder.itemImage.setImageResource(imgid[position]);

            holder.itemImage.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            System.out.println("here1");
        }
    });

    holder.txt_itemName.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            System.out.println("here2");
        }
    });


    return convertView;
}
...
anonymous123
  • 1,271
  • 6
  • 19
  • 43
  • can you elaborate on what you mean? Exactly what porrtion are you trying to make clickable? The ListView itself? Each row? The elements within each row? – FoamyGuy Jun 15 '12 at 13:11
  • i want the entire row to be clickable. The code in the onClick, I have written for testing, for now. – anonymous123 Jun 15 '12 at 13:14

3 Answers3

1
 I want to implement a click event on the listview, but it is not working. 

check two things

1- have you implemt list click this way ?

 list.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        // @todo
                }
        }); 

2- is there any clickable item in list row if yes then refer

Android: ListView elements with multiple clickable buttons

http://mylifewithandroid.blogspot.in/2011/08/focus-problems-with-list-rows-and.html

for handling the click on item in row :

1- Imaplent you activity with View.OnClickListener
2- Pass it to adpter 
3- holder.itemImage.setOnClickListener(mActivity)
4- override the View.OnClickListener in activity 
Community
  • 1
  • 1
Dheeresh Singh
  • 15,643
  • 3
  • 38
  • 36
1

You have a few options.

You could apply the listener before you return convertView inside your getView() method. Like this:

public View getView(int position, View convertView, ViewGroup parent) {
    .....
    convertView.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

        }
    });

    return convertView;
}

OR (as @DheereshSingh mentioned) you could accomplish this from up one level, inside the Activity that houses the ListView.

ListView lv = (ListView)findViewById(R.id.listView);
lv.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

    }
}); 
FoamyGuy
  • 46,603
  • 18
  • 125
  • 156
0

If you are using listview you can always use the method of Dheeresh.

If you are just looking for an onclick you may also use

View view = convertView;
view.setTag(position);//Sets a position
view.setonclicklistener(new OnClickListener){//creates a onClicklistener for tag

public void onClick(View v){
//Do something
}

}

You may also use this for gridview.

If you want to do extra stuff you can actually set each item in baseadapter to have a click event to do something different everytime.