web-dev-qa-db-ja.com

XMLレイアウトにフラグメントを追加する方法

次のようなフラグメントを含むレイアウトがあります。

<fragment
        Android:id="@+id/mainImagesList"
        Android:name="com.guc.project.ImagesList"
        Android:layout_width="match_parent"
        Android:layout_height="62dp"
        Android:layout_below="@+id/addimagebutton"
        Android:layout_weight="1"
        Android:paddingTop="55dp" />

次に、このフラグメントを取得してキャストし、操作して更新が表示されるようにする必要があります。どうすればできますか?!

編集:フラグメントを取得できたと思いますが、いくつかの変数を変更しても、変更は表示されません!

65
ahmed

次のようにフラグメントインスタンスを取得できます。

getSupportFragmentManager().findFragmentById(R.id.yourFragmentId)
120
赏心悦目

フラグメントが別のフラグメントに埋め込まれている場合、getChildFragmentManagerは必要ですが、getFragmentManagerは必要ありません。たとえば、レイアウトxmlで次のようにフラグメントを定義します。

<fragment 
    Android:name="com.aventlabs.ChatFragment"
    Android:id="@+id/chatfragment"
    Android:background="#ffffff"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:layout_weight="1"
    Android:layout_marginTop="50dp"
    Android:layout_marginLeft="5dp"
    Android:layout_marginRight="5dp" />

コードでは、次のようにフラグメントインスタンスを取得できます。

FragmentManager f = getChildFragmentManager();
FragmentTransaction transaction = f.beginTransaction();
chatFragment = f.findFragmentById(R.id.chatfragment);

if (chatFragment != null) {
   transaction.hide(chatFragment);
}
transaction.commit();
15
ldehai

Androidとインターフェイスを使用してこれを行う最も簡単な方法でまったく同じことをしました。

これを使う

    final Integer numeroFragments = ((PagerAdapterOfe) mViewPager.getAdapter()).getCount();

    for (int i=0; i<numeroFragments; i++) {
        Object fragment = ((PagerAdapterOfe) mViewPager.getAdapter()).getItem(i);

        // If the fragment implement my interface, update the list
        if (fragment instanceof IOfertaFragment){
        ((IOfertaFragment) fragment).actualizaListaOfertas();
        }
    }

ここで、PageAdapterOfeは私のアクティビティフラグメントアダプターです。私はすべてのフラグメントをループし、インターフェースを実装するフラグメントを検索します。フラグメントが見つかったら、インターフェースで定義されたメソッドを実行します。

すべてのフラグメントを保持するアクティビティ内でこのコードを使用し、ブロードキャスト信号に応答して、必要な場所に配置できます。

インターフェース:

public interface IOfertaFragment {

    public void actualizaListaOfertas();
}
4

フラグメントを見つけるには、findFragmentById(含まれているコンポーネントがわかっている場合)またはfindFragmentByTag(そのタグがわかっている場合)を使用します。

どの変数を更新するのかわかりませんが、FragmentTransaction APIを使用して、フラグメントを別のフラグメントに置き換えることができます。

例については、 http://developer.Android.com/guide/components/fragments.html を参照してください。

1
Adrian G