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>

関連する機能の 1 つ:

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 と等しくなり、階層の深さが 1 つ減ることです。

ViewStub ドキュメント

編集: おそらくViewGroupの方が適しています。

于 2010-10-11T17:59:36.603 に答える