0

我通过 Java 将列表视图添加到 @+id/View01 中。由于某种原因,列表视图中的项目不接受点击。有人对可能的原因有想法吗?

<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:orientation="vertical"
  android:layout_height="fill_parent"
  android:background="@color/light_blue"
  >
    <Button android:text="@+id/Button01" 
        android:id="@+id/Button01" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"/>
    <AbsoluteLayout 
    android:id="@+id/Layout01" 
    android:layout_width="fill_parent"
    android:orientation="vertical"
    android:layout_below="@+id/Button01"        
    android:layout_above="@+id/Button02"
    android:layout_height="fill_parent">

        <View android:id="@+id/View01" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
        />
        <ListView android:id="@+id/ListView02" 
            android:layout_width="fill_parent" 
            android:layout_height="fill_parent"
            android:gravity="center_horizontal"/>
    </AbsoluteLayout>
    <Button android:text="@+id/Button02" 
        android:id="@+id/Button02" 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:textAppearance="?android:attr/textAppearanceLarge"/>
</RelativeLayout>

如果我将我的代码更改为以下点击工作,但布局看起来不像我想要的那样:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:orientation="vertical"
  android:layout_height="fill_parent"
  android:background="@color/light_blue"
  >
    <Button android:text="@+id/Button01" 
        android:id="@+id/Button01" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"/>

    <View android:id="@+id/View01" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:layout_below="@+id/Button01"
        android:gravity="center_horizontal"
        />
    <ListView android:id="@+id/ListView02" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:layout_below="@+id/View01"
        android:gravity="center_horizontal"
        android:layout_above="@+id/Button02"/>
    <Button android:text="@+id/Button02" 
        android:id="@+id/Button02" 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:textAppearance="?android:attr/textAppearanceLarge"/>
</RelativeLayout>

涉及的功能之一:

protected void initiateExtraView(FillInput fillInput){
    View extraView = fillInput.getExtraView();
    ViewGroup parent = (ViewGroup) extraView.getParent();
    int index = parent.indexOfChild(extraView);
    parent.removeView(extraView);
    extraView = fillInput.getLayoutInflater().inflate(
             R.layout.extrabuttonlistview, 
             parent, 
             false);

    parent.addView(extraView, index);
    fillInput.setExtraView(extraView);

    ListView extraButtonView = (ListView) extraView;
    fillInput.setExtraButtonListView(extraButtonView);

    ListAdapter adapter = new ExtraButtonAdapter(fillInput, this);
    fillInput.getExtraButtonListView().setAdapter(adapter);     
}

ExtraButtonAdapter 中创建不接受点击的特定视图的函数:

private View getNewForm(int position, View convertView,
        ViewGroup parent) {
    View view = mInflater.inflate(
            R.layout.new_form_button, 
            parent, 
            false);

    View.OnClickListener listener = new View.OnClickListener() {
        public void onClick(View v) {

            Log.i(TAG, "Click on NewForm");
        }
    };
    view.setOnClickListener(listener);

    setNewFormView(view);
    return view;
}

R.layout.extrabuttonlistview:

<?xml version="1.0" encoding="UTF-8"?>
    <ListView android:id="@+id/ListView01" 
    xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:clickable="true"
        android:gravity="center_horizontal"
        android:layout_above="@+id/Button02"/>
4

2 回答 2

0

默认情况下,ListView 不会将触摸事件传递给孩子,除非它可以接受焦点。您可以通过调用来更改此行为setItemsCanFocus(true)

ListView 的默认行为将项目视为单个单元,并使用OnItemClickListener附加到 ListView 本身来调度单击事件。

于 2010-10-11T17:57:11.120 回答
0

您是否真的尝试过<View android:id="@+id/View01"

<ViewStub android:id="@+id/listViewStub" android:inflateId="@+id/View01" android:layout="@layout/layout/new_form_button" />

在代码中你可以通过

ViewStub stub = (ViewStub)findViewById(R.id.listViewStub);
stub.inflate();

您尝试将 ListView 添加到 View 元素中似乎很奇怪。

使用 ViewStub 进行膨胀的优点是,一旦膨胀,“ViewStub”元素将完全被您的 ListView 替换,然后等于您的 ListView02,并将您的层次结构深度减少一。

ViewStub 文档

编辑: 也许ViewGroup更合适。

于 2010-10-11T17:59:36.603 回答