> 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?

Indeed it does. ListView is not ready to do things like this really
but a way to do it (much better than how it was done in AlarmClock) is
to use a TouchDelegate for the checkbox.

>
> 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>
> >
>



-- 
Romain Guy
Android framework engineer
[email protected]

Note: please don't send private questions to me, as I don't have time
to provide private support.  All such questions should be posted on
public forums, where I and others can see and answer them

--~--~---------~--~----~------------~-------~--~----~
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