0

最初のAndroidアプリケーションのサポートが必要です。上部にアクションバーがあり、ナビゲーションタブがある単一のアクティビティがあります。これらのナビゲーションタブのために、アクティビティをフラグメントに変換する必要がありました。

したがって、これらのアクティビティの1つ(現在はフラグメント)には2つのフラグメントがあります。1つは左側にListFragment、右側にDetailFragmentです。これにより、ユーザーはリストからアイテムを選択して、右側に詳細を直接表示できます。

しかし、アクティビティがフラグメントに変換されたため、List-とDetailFragmentを保持するのはフラグメントです。これは、DetailsFragmentを変更するまでは正常に機能します。

まず、他の2つを保持しているフラグメントのコードを次に示します。

public class BlackboardFragment extends Fragment {

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        return inflater.inflate(R.layout.fragment_layout, container, false);
    }

}

次に、fragment_layout.xmlファイル(layout-landに保存)を示します。

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <fragment
        android:id="@+id/interfaces"
        android:layout_width="0px"
        android:layout_height="match_parent"
        android:layout_marginRight="20dp"
        android:layout_weight="0.60"
        class="org.fawkesrobotics.app.InterfaceFragment" />

    <FrameLayout
        android:id="@+id/viewer"
        android:layout_width="0px"
        android:layout_height="match_parent"
        android:layout_weight="1" />

</LinearLayout>

したがって、ListFragmentの名前はInterfaceFragmentです。コードは次のとおりです。

public class InterfaceFragment extends ListFragment {

    boolean mDualPane;

//      some other code

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);

        create_list();

        View viewerFrame = getActivity().findViewById(R.id.viewer);
        mDualPane = viewerFrame != null
                && viewerFrame.getVisibility() == View.VISIBLE;

        if (savedInstanceState != null) {
            mCurCheckPosition = savedInstanceState.getInt("curChoice", 0);
        }
    }

//      some other code
}

これは、それが機能しない場所です。フラグメントは実際にはリスト(ListAdapterと他のすべてが設定されているcreate_list()で作成されます)を表示しますが、私の問題は、viewerFrameがnullであるということです。上記のxmlファイルでIDビューアを宣言したので、なぜ彼がIDを見つけられないのかわかりません。それはBlackBoardFragmentまたは私の全体的な活動に「属している」のでしょうか?BlackboardFragmentでは、getActivity()。findViewByIdでも試してみたところ、うまくいきました。InterfaceFragmentがそれを見つけられないのはなぜですか?

彼が実際にlayout-landでfragment_layout.xmlを使用しているかどうかもテストしましたが、実際に使用しています。したがって、彼はidビューアを知っている必要がありますが、明らかに知りません。

さらにコードまたはDetailsFragmentのコードが必要な場合は、投稿できます。

よろしくお願いします!:)

4

2 に答える 2

1

ネストされたはAndroidSDKFragmentではサポートされていません。つまり、Androidアプリケーションに「フラグメント内のフラグメント」を含めることはできません。ごめん。

編集:

ネストされたFragmentものは、公式のAndroid4.2SDKの一部になりました。わーい!

于 2012-06-13T15:02:34.677 に答える
1

FragmentManager を使用して Fragment を取得します......

ExampleFragment fragment = (ExampleFragment)  getActivity().getFragmentManager().findFragmentById(R.id.example_fragment);
于 2012-06-13T14:51:25.963 に答える