Anybody?
On Mar 5, 6:54 pm, Jesse McGrew <jmcg...@gmail.com> 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 android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers-unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---