ListView元素不可点击

时间:2011-10-27 23:45:23

标签: android android-layout

我有一个带SimpleCursorAdapter的ListView。布局使用的是LinearLayout,但是当阅读有关复杂(嵌套)布局的内存消耗的手册时,我切换到了RelativeLayout,而我设法完全按照自己的意愿设置了布局。

现在,有一个怪癖。在模拟器中,我无法单击列表项。好像元素是一个很大的“没有按钮”。但是,如果我使用模拟器箭头并选择listview元素(突出显示它)并单击按钮,它可以正常工作。

为什么我不能“点击”listview项目,因为我切换到RelativeLayout?

这是XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content" >

  <TextView
    android:id="@+id/locationName"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Junk text"
    android:textAppearance="?android:attr/textAppearanceMedium" />

  <TextView
    android:id="@+id/numStores"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/locationName"
    android:text="Junk text #1: 117"
    android:textSize="10dp" />

  <TextView
    android:id="@+id/numItems"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/numStores"
    android:text="Junk text #2: 42"
    android:textSize="10dp" />
</RelativeLayout>

我甚至为RelativeLayout尝试了android:clickable="true",但没有用。

修改 onClick的代码如下:

listItems.setOnItemClickListener(new OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    int countyID = cursor.getInt(cursor.getColumnIndex(LocationDB.C_ID));
    int numItems = cursor.getInt(cursor.getColumnIndex(LocationDB.C_NUM_ITEMS));
    int numStores = cursor.getInt(cursor.getColumnIndex(LocationDB.C_NUM_STORES));
    String countyName = cursor.getString(cursor.getColumnIndex(LocationDB.C_NAME));
    String foo = String.format(TAG + "Clicked ID #%d (%s), stores = %d, items = %d", countyID, countyName, numStores, numItems);
    Log.i(LOG_TAG, foo);

    // Show the item in a new activity
    Intent apan = new Intent(avBase, Browser.class);
    apan.putExtra("countyID", countyID);
    startActivity(apan);
  }
});

编辑2

现在在我的手机上测试了代码,我得到了同样的错误;使用RelativeLayout时无法单击项目。

2 个答案:

答案 0 :(得分:4)

我也遇到了一些问题,这似乎与点击听众的ListView和我在Adapter中分配的每个项目的组合有关。

在我的Adapter.getView()中,我必须确保项目的配置如下:

item.setLongClickable( false );
item.setClickable( false );
item.setOnClickListener( null ); 

我的ListView必须设置OnItemClickListener和/或OnItemLongClickListener

打开列表视图中单个项目的点击将无效。也许这也是导致你的问题的原因。

答案 1 :(得分:1)

似乎这是Google忽略的错误:http://code.google.com/p/android/issues/detail?id=3414