Hi,
One of my ListView's has a CheckBox on every item's RelativeLayout.

I just found that clicking on any item of the ListView does not
callback its OnItemClick().

If I remove the CheckBox from item layout, callback is ok then.

My app needs to get both callbacks from the CheckBox as well as from
"the other area" of a ListView item.

I read
http://android-developers.blogspot.com/2008/12/touch-mode.html
But I'm a bit confuse.

Can anybody advise me how I get the callback on the ListView with
CheckBox?


public class UserList extends ListActivity implements
ListView.OnItemClickListener, ListView.OnClickListener{

        private Client client;
        private ArrayList<User> users = new ArrayList<User>();
        private UserAdapter userAdapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.user_list);

        getListView().setOnItemClickListener(this);

        Intent i = getIntent();
        if (i!= null)
        {
                if (i.getAction().equalsIgnoreCase(Intent.ACTION_VIEW))
                {
                this.client = (Client) i.getSerializableExtra
(Constants.CLIENT_CLASS_NAME);

                this.userAdapter = new UserAdapter(this,
R.layout.user_row, users);

                users = (ArrayList<User>) this.client.getUsers();

                Log.i(getClass().getSimpleName(),"Display users");
                for(int j=0;j<users.size();j++)
                {
                        this.userAdapter.add(users.get(j));
                }
                setListAdapter(this.userAdapter);

                }
        }
    }


    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int
position, long id)
    {
        Log.d(getClass().getSimpleName(), " -- Click on User item -- ");
    }


    private class UserAdapter extends ArrayAdapter<User> {

        private LayoutInflater mInflater;
        private ArrayList<User> items;

        public UserAdapter(Context context, int resourceId,
ArrayList<User> items)
        {
                super(context, resourceId, items);
            mInflater = LayoutInflater.from(context);
                this.items = items;
        }

        public boolean areAllItemsSelectable()
        {
            return true;
        }

        public boolean isEnabled(int position) {
            if (position >= 0 && position <= items.size()) {
                return true;
            }
            return false;
        }

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

        public User getItem(int position) {
              if (0 == position) {
                  return null;
              }
              return items.get(position);
         }

        @Override
        public View getView(int position, View convertView, ViewGroup
parent) {
            // A ViewHolder keeps references to children views to
avoid unnecessary calls
            // to findViewById() on each row.
            ViewHolder holder = null;
            View v = convertView;
            User user = items.get(position);

            if (v == null) {
                mInflater = (LayoutInflater)getSystemService
(Context.LAYOUT_INFLATER_SERVICE);
                v = mInflater.inflate(R.layout.user_row, null);

                    if (user != null) {
                        // Creates a ViewHolder and store references to the
children views
                        // we want to bind data to.
                        holder = new ViewHolder();
                        holder.firstNameText = (TextView) v.findViewById
(R.id.user_first_name);
                        holder.lastNameText = (TextView) v.findViewById
(R.id.user_last_name);
                        holder.phoneNumberText = (TextView) v.findViewById
(R.id.user_phone_number);
                        holder.statusText = (TextView) v.findViewById
(R.id.user_status);
                    }

                    v.setTag(holder);
            }
                else
                {
                        // Get the ViewHolder back to get fast access to the
TextView
                // and the ImageView.
                holder = (ViewHolder) v.getTag();
                }

            if (holder.firstNameText != null) {
                holder.firstNameText.setText(user.getFirstName());
            }
            if (holder.lastNameText != null){
                holder.lastNameText.setText(user.getLastName());
            }
            if ( holder.phoneNumberText != null){
                 holder.phoneNumberText.setText(user.getPhoneNumber());
            }
            if (holder.statusText != null){
                holder.statusText.setText(String.valueOf(user.getStatus
()));
            }

            return v;
        }


        class ViewHolder {
            TextView firstNameText;
            TextView lastNameText;
            TextView phoneNumberText;
            TextView statusText;

        }

    }




Best regards
Tom
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to