title: listview onitemclicklistener for a custom layout
body: <p>I have a <code>listview</code>:</p>
  
  <pre><code>   &lt;ListView
          android:clickable="true"
          android:id="@android:id/list"
          android:layout_width="match_parent"
          android:layout_height="wrap_content" &gt;
      &lt;/ListView&gt;
  </code></pre>
  
  <p>the elements that go inside it are like this:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:orientation="horizontal" &gt;
  
  
  
  
      &lt;TextView
          android:id="@+id/textview_name"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_weight="0.76"
          android:text="Choose"
          android:clickable="true" /&gt;
  
  
      &lt;EditText
          android:id="@+id/edittext_share"
          android:layout_width="50dp"
          android:layout_height="wrap_content"
          android:layout_weight="0.12"
          android:ems="10"
          android:hint="share"
          android:inputType="number" &gt;
  
          &lt;requestFocus /&gt;
      &lt;/EditText&gt;
  
  
      &lt;EditText
          android:id="@+id/edittext_spent"
          android:layout_width="50dp"
          android:layout_height="wrap_content"
          android:layout_weight="0.11"
          android:ems="10"
          android:hint="spent"
          android:inputType="number" /&gt;
  
  &lt;/LinearLayout&gt;
  </code></pre>
  
  <p>I want that when I click on the <code>TextView</code>, something should happen. I have set the <code>setOnItemClickListener</code> via the <code>getListView()</code> but it does not work.</p>
  
  <pre><code>    public void onItemClick(AdapterView&lt;?&gt; arg0, View arg1, int arg2, long arg3) {
      // TODO Auto-generated method stub
      Toast.makeText(this,"clicked id="+arg2, Toast.LENGTH_SHORT).show();
  }
  </code></pre>
  
  <p>and</p>
  
  <pre><code>        ListView lv = getListView();
      lv.setOnItemClickListener(this);
  </code></pre>
  
  <p>What do I do to make the textview clicable?</p>
  
  <p><em><strong>EDIT</em></strong>: my adapter code:</p>
  
  <pre><code>    private class PeopleListAdapter extends BaseAdapter {
      private LayoutInflater mInflater;
      public Cursor cursor;
      public ArrayList&lt;PersonInfo&gt; peopleList;
      public ArrayList&lt;PersonInfo&gt; unsavedPeopleList;
  
      public PeopleListAdapter(Context context, Cursor cursor) {
          // Cache the LayoutInflate to avoid asking for a new one each time.
          mInflater = LayoutInflater.from(context);
          this.cursor = cursor;
          peopleList = new ArrayList&lt;PersonInfo&gt;(cursor.getCount());
      }
  
      public PeopleListAdapter(Context context, Cursor cursor,
              ArrayList&lt;PersonInfo&gt; unsavedList) {
          this(context, cursor);
          this.unsavedPeopleList = unsavedList;
      }
  
      /**
       * The number of items in the list is determined by the number of
       * speeches in our array.
       * 
       * @see android.widget.ListAdapter#getCount()
       */
      public int getCount() {
          return peopleList.size() + unsavedPeopleList.size();
      }
  
      /**
       * Since the data comes from an array, just returning the index is
       * sufficent to get at the data. If we were using a more complex data
       * structure, we would return whatever object represents one row in the
       * list.
       * 
       * @see android.widget.ListAdapter#getItem(int)
       */
      public Object getItem(int position) {
  
          return position;
      }
  
  
      /**
       * Use the array index as a unique id.
       * 
       * @see android.widget.ListAdapter#getItemId(int)
       */
      public long getItemId(int position) {
          return position;
      }
  
      /**
       * Make a view to hold each row.
       * 
       * @see android.widget.ListAdapter#getView(int, android.view.View,
       *      android.view.ViewGroup)
       */
      public View getView(int position, View convertView, ViewGroup parent) {
          // A ViewHolder keeps references to children views to avoid
          // unneccessary calls
          // to findViewById() on each row.
          ViewHolder holder;
  
          // When convertView is not null, we can reuse it directly, there is
          // no need
          // to reinflate it. We only inflate a new View when the convertView
          // supplied
          // by ListView is null.
          if (convertView == null) {
              convertView = mInflater.inflate(R.layout.list_item_person_info,
                      null);
  
              // Creates a ViewHolder and store references to the two children
              // views
              // we want to bind data to.
              holder = new ViewHolder();
              holder.name = (TextView) convertView
                      .findViewById(R.id.textview_name);
              holder.share = (EditText) convertView
                      .findViewById(R.id.edittext_share);
              holder.spent = (EditText) convertView
                      .findViewById(R.id.edittext_spent);
              convertView.setTag(holder);
  
          } else {
              // Get the ViewHolder back to get fast access to the TextView
              // and the ImageView.
              holder = (ViewHolder) convertView.getTag();
          }
  
          // Bind the data efficiently with the holder.
          PersonInfo p = getPersonInfo(position);
          holder.name.setText(p.name);
          holder.name.setTag(p.lookupUri);
          holder.share.setText(p.share + "");
          holder.spent.setText(p.spent + "");
  
          return convertView;
      }
  
      PersonInfo getPersonInfo(int position) {
          if (position &lt; peopleList.size()) {
              PersonInfo pInfo = peopleList.get(position);
              if (pInfo == null) {
                  pInfo = new PersonInfo();
                  cursor.moveToPosition(position);
                  pInfo.lookupUri = Uri.parse(cursor.getString(0));
                  Cursor c = NewEventActivity.this.getContentResolver()
                          .query(pInfo.lookupUri,
                                  new String[] { Contacts._ID,
                                          Contacts.DISPLAY_NAME }, null,
                                  null, null);
                  pInfo.share = cursor.getInt(1);
                  pInfo.spent = cursor.getInt(2);
                  try {
                      if (c.moveToFirst()) {
                          pInfo.name = c.getString(1);
                      }
                  } finally {
                      cursor.close();
                  }
                  peopleList.set(position, pInfo);
  
              }
  
              return pInfo;
          } else {
              return unsavedPeopleList.get(position - peopleList.size());
          }
      }
  </code></pre>