1

私のアプリは、各タブにFragmentActivityが割り当てられているタブ付きレイアウトに基づいています。
このアクティビティの1つには、次のレイアウトがあります。

<FrameLayout
android:id="@+id/filialenView"
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">

<ListView android:layout_height="wrap_content" android:id="@+id/filialList"
  android:layout_width="fill_parent"></ListView>

</FrameLayout>

そのタブに切り替えると、リストが作成されて表示されます。
リストアイテムを選択すると、フラグメントが作成され、リストの一番上に表示されます。

    Filiale fragment = new Filiale();
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

    fragmentTransaction.replace(R.id.filialenView, fragment);

    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();

FragmentFilialeのレイアウト「filial_detail.xml」はのようになります。

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
 ... content...
</LinearLayout>

このようにonCreateViewで膨らませます

View curView = inflater.inflate(R.layout.filial_detail, container, false);

フラグメントに切り替えた後、表示されなくなったリストが入力フォーカスを維持しているように見えることを除いて、すべてが期待どおりに機能します。画面の「空の」領域をタッチすると、フラグメントの背後にある非表示のリストアイテムがトリガーされます。また、スワイプすると、LogCatの出力から、リストがスクロールしていることがわかります。
FrameLayoutの私の理解に基づいて、このようなビューをスタックすることは問題ないはずです。

そのコードの何が問題になっていますか?

まだ回答やコメントがないので、より一般的な質問です。
背景のビューが入力を受け取ることになっている既知の状況はありますか、それともその間違った動作はありますか?

4

1 に答える 1

1

この動作の理由は、ViewGroupsはデフォルトでは入力イベントを処理しないが、存在する場合はその背後にあるウィジェットにそれらを渡すためです。
私の与えられたコードでは、リストの高さは「wrap_content」であるため、残りの垂直領域は、入力を非表示のフラグメントに渡すLinearLayout要素によってのみカバーされます。
私が望んでいた振る舞いは、

  • listViewの高さを「fill_parent」に設定するか、
  • 空のonClickメソッドを使用してOnClickListenerをLinearLayoutに追加する
于 2011-06-03T20:23:11.977 に答える