Romain,

Thanks for your response. I'm not sure if that approach will work,
though. My ListActivity's onListItemClick() method is called when I
click on an item with the trackball, but *not* when I touch it.

Perhaps the root problem is that my list rows have focusable items in
them (check boxes). The built-in Alarm Clock application has something
similar, though, and I can see from the source code that Alarm Clock
sets individual click listeners on the check boxes and the clock
views.

I'm trying to get the same behavior as Alarm Clock, where tapping on a
list row brings up an activity to edit the row, and the check box can
only be selected by tapping on the check box itself. I think that
precludes using multiple-choice mode for the list view, correct?

Jesse

On Mar 11, 4:38 pm, "Romain Guy (Google)" <[email protected]>
wrote:
> Hi Jesse,
>
> You should **not** set individual click listeners on the list items.
> This will cause all sort of problems, like the ones you're seeing. The
> main reason behind that is that ListView handles clicks/long clicks on
> the items already. Instead you should use
> ListView.setOnItemClickListener().
>
> On Mar 5, 6:54 pm, Jesse McGrew <[email protected]> wrote:
>
> > I have a list activity that creates a header row above the data rows
> > from the adapter. I want to receive click events when the user selects
> > the header or a data row (but my data rows have check boxes in them,
> > so this part is tricky). When I use the touch screen, I get this
> > expected behavior:
>
> > 1. Tapping on any row causes a click event and a dialog appears.
> > 2. Long-pressing on a data row causes a context menu to appear.
> > 3. Long-pressing on the header row does *not* show the context menu.
>
> > However, when I use the arrow keys (emulator) or trackball (G1), I get
> > this unexpected behavior:
>
> > 1. Selecting any row fails to cause any click events, even though the
> > row's appearance changes like it's being clicked.
> > 2. Long-pressing on the header row *does* show the context menu, which
> > I don't want.
> > 3. Occasionally, it doesn't focus the correct row when I move up or
> > down (e.g. it skips from the header to the last data row).
>
> > What am I doing wrong?
>
> > Jesse
>
> > (Complete project:http://hansprestige.com/android/DpadBug.zip)
>
> > ////////// DpadActivity.java //////////
>
> > package com.hansprestige.DpadBug;
>
> > import android.app.AlertDialog;
> > import android.app.Dialog;
> > import android.app.ListActivity;
> > import android.os.Bundle;
> > import android.view.ContextMenu;
> > import android.view.View;
> > import android.view.ViewGroup;
> > import android.view.ContextMenu.ContextMenuInfo;
> > import android.view.View.OnClickListener;
> > import android.widget.ArrayAdapter;
> > import android.widget.ListView;
>
> > public class DpadBugActivity extends ListActivity {
> >         private static final int DIALOG_TEST = 1;
>
> >     private OnClickListener testListener = new OnClickListener() {
> >         public void onClick(View v) {
> >                 showDialog(DIALOG_TEST);
> >         }
> >     };
>
> >     @Override
> >     public void onCreate(Bundle savedInstanceState) {
> >         super.onCreate(savedInstanceState);
> >         setContentView(R.layout.main);
>
> >         ListView lv = getListView();
> >         registerForContextMenu(lv);
>
> >         findViewById(android.R.id.empty).setOnClickListener
> > (testListener);
>
> >         View addItem = getLayoutInflater().inflate
> > (R.layout.list_header,
> >                         null, false);
> >         addItem.setOnClickListener(testListener);
> >         lv.addHeaderView(addItem);
>
> >         fillData();
>
> > }
>
> >     private void fillData()
> >     {
> >         String[] items = new String[] { "Item A", "Item B", "Item C" };
> >         ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
> > R.layout.list_row, R.id.TextView01, items) {
> >                 @Override
> >                 public View getView(int position, View convertView, 
> > ViewGroup
> > parent) {
> >                         View v = super.getView(position, convertView, 
> > parent);
> >                         v.setOnClickListener(testListener);
> >                         v.setLongClickable(true);
> >                         return v;
> >                 }
> >         };
> >         setListAdapter(adapter);
> >     }
>
> >     @Override
> >     protected Dialog onCreateDialog(int id) {
> >         switch (id) {
> >         case DIALOG_TEST:
> >                 return new AlertDialog.Builder(this)
> >                         .setTitle("Hello!")
> >                         .setPositiveButton("Close", null)
> >                         .create();
> >         }
> >         return super.onCreateDialog(id);
> >     }
>
> >     @Override
> >     public void onCreateContextMenu(ContextMenu menu, View v,
> >                 ContextMenuInfo menuInfo) {
> >         super.onCreateContextMenu(menu, v, menuInfo);
> >         menu.add("Context item");
> >     }
>
> > }
>
> > ////////// main.xml //////////
>
> > <?xml version="1.0" encoding="utf-8"?>
> > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/
> > android"
> >         android:layout_width="fill_parent"
> >     android:layout_height="fill_parent">
>
> >             <ListView android:id="@+id/android:list"
> >                 android:layout_width="fill_parent"
> >                 android:layout_height="fill_parent"
> >                 android:focusable="false" />
> >             <include android:id="@+id/android:empty" layout="@layout/
> > list_header" />
> > </LinearLayout>
>
> > ////////// list_header.xml //////////
>
> > <?xml version="1.0" encoding="UTF-8"?>
> > <!-- This seems way too complicated, but the outer view's layout
> > params are apparently
> >         ignored, so I don't see a simpler way to (1) center the text
> > vertically in a large
> >         row and (2) make the background highlight fill the entire row. -->
> > <FrameLayout xmlns:android="http://schemas.android.com/apk/res/
> > android"
> >         android:layout_width="wrap_content"
> > android:layout_height="wrap_content"
> >         android:background="@android:drawable/menuitem_background"
> >         android:focusable="true"
> > android:descendantFocusability="blocksDescendants">
> >         <FrameLayout android:layout_width="99999dip"
> > android:layout_height="50dip">
> >                         <TextView android:text="List header view"
> >                                 
> > android:textAppearance="?android:attr/textAppearanceLarge"
> >                                 android:layout_gravity="center_vertical"
> >                                 android:layout_width="wrap_content"
> > android:layout_height="wrap_content"
> >                                 android:paddingLeft="10dip"></TextView>
> >         </FrameLayout>
> > </FrameLayout>
>
> > ////////// list_row.xml //////////
>
> > <?xml version="1.0" encoding="UTF-8"?>
> > <RelativeLayout android:id="@+id/RelativeLayout01"
> >         xmlns:android="http://schemas.android.com/apk/res/android";
> > android:clickable="true"
> >         android:focusable="true" android:background="@drawable/
> > android:menuitem_background"
> >         android:layout_width="fill_parent"
> > android:layout_height="wrap_content"
> >         android:descendantFocusability="blocksDescendants">
> >                 <CheckBox android:layout_alignParentLeft="true"
> > android:layout_alignParentTop="true"
> >                         android:layout_width="wrap_content"
> > android:layout_height="wrap_content"
> >                         android:id="@+id/CheckBox01" 
> > android:layout_marginTop="1dip"
> >                         android:layout_marginRight="2.5dip"
> > android:layout_marginLeft="1dip"></CheckBox>
> >                 <TextView android:layout_width="wrap_content"
> > android:layout_height="wrap_content"
> >                         android:layout_alignParentTop="true" 
> > android:id="@+id/TextView01"
> >                         android:text="Top left" android:textStyle="bold"
> >                         android:layout_toRightOf="@+id/CheckBox01"
> > android:layout_marginTop="5dip"
> >                         android:focusable="false"></TextView>
> >                 <TextView android:layout_width="wrap_content"
> > android:layout_height="wrap_content"
> >                         android:text="Bottom left" 
> > android:layout_alignLeft="@+id/
> > TextView01"
> >                         android:id="@+id/TextView02" 
> > android:focusable="false"
> >                         android:layout_below="@+id/TextView01"></TextView>
> >                 <TextView android:layout_width="wrap_content"
> > android:layout_height="wrap_content"
> >                         android:text="Top right" 
> > android:layout_alignParentTop="true"
> >                         android:layout_alignParentRight="true" 
> > android:id="@+id/TextView03"
> >                         android:textStyle="bold" 
> > android:layout_marginRight="5dip"
> >                         android:layout_marginTop="5dip" 
> > android:focusable="false"></
> > TextView>
> >                 <TextView android:layout_width="wrap_content"
> > android:layout_height="wrap_content"
> >                         android:text="Bottom right" 
> > android:id="@+id/TextView04"
> >                         android:layout_below="@+id/TextView03" 
> > android:layout_alignRight="@
> > +id/TextView03"
> >                         android:focusable="false"></TextView>
> > </RelativeLayout>
--~--~---------~--~----~------------~-------~--~----~
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