web-dev-qa-db-ja.com

フラグメントとアクティビティの主な違いは何ですか?どのコードをフラグメントで記述できますか?

それぞれ3つのフラグメントと1つのメインアクティビティを持つ3つのタブがあり、wifiネットワーク経由でメッセージを送信するためのソケットを作成したいので、どこにコードを書く必要がありますか?その特定のフラグメントクラスまたはメインアクティビティでは?

16
Talib

もちろん、フラグメント内に任意のコードを記述できますが、いくつかの点に注意する必要があります。コンテキストまたはアクティビティに固有の何かを必要とするものにアクセスするときは、フラグメントのスーパーアクティビティへの参照を取得する必要があります。アクティビティ内にインテントを作成している間、次のようなことを行います。

    Intent intent = new Intent(this,SomeActivity.class);

しかし、フラグメント内では、次のようなことを行う必要があります。

    Intent intent = new Intent(super.getActivity(),SomeActivity.class);

同様に、フラグメントのレイアウトファイルから何かにアクセスしている場合。次の手順を実行する必要があります。

1)フラグメント内のフラグメントの親レイアウトへのグローバル参照を取得します。例えば

    private LinearLayout result_view;

2)onCreateメソッドの代わりにOnCreateViewメソッドを実装します。

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

        return result_view;
    }

3)フラグメントのonCreateViewメソッド内で次のようにフラグメントレイアウトを拡張します。

    result_view = (LinearLayout) inflater.inflate(
            R.layout.image_detail_pager, container, false);

4)次のようなレイアウトビューにアクセスできるようになりました:

    layout_a = (LinearLayout) result_view
            .findViewById(R.id.some_layout_id); 
16