75

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

<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" />

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

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

4

5 に答える 5

140

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

getSupportFragmentManager().findFragmentById(R.id.yourFragmentId)
于 2014-05-11T13:06:47.313 に答える
22

フラグメントが別のフラグメントに埋め込まれている場合は、必要ですが、必要はありgetChildFragmentManager()ませんgetFragmentManager()。たとえば、layout 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();
于 2015-10-14T03:03:10.400 に答える
4

私はAndroidでもまったく同じことを行い、インターフェースを使用してこれを行う最も簡単な方法を実行しました。6つのフラグメントを使用したアクティビティがあり、そのうち3つだけを更新する必要がありました。

私はこれを使います

    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();
}
于 2012-12-17T09:44:05.803 に答える
1

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

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

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

于 2012-12-17T09:27:07.107 に答える
1

FragmentがActivityのレイアウトファイル内に含まれている場合、SupportFragmentManagerによって次のように参照できます...

MyFragment myFragment= (MyFragment)getSupportFragmentManager().findFragmentById(R.id.FRAGMENTID)

Fragmentが別のFragmentのレイアウトファイル内に含まれている場合、ChildFragmentManagerは次のように参照できます...

 MyFragment myFragment= (MyFragment)getChildFragmentManager().findFragmentById(R.id.FRAGMENTID)
于 2020-02-15T09:28:42.000 に答える