Подтвердить что ты не робот

Как получить фрагмент, добавленный в 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" />

Теперь мне нужно получить этот фрагмент и бросить его, чтобы я мог манипулировать им, и появлялись обновления. Как я могу это сделать?!

EDIT: Мне кажется, мне удалось получить фрагмент, но когда я изменяю некоторые переменные, изменения не отображаются!

4b9b3361

Ответ 1

Вы можете получить экземпляр фрагмента следующим образом:

getSupportFragmentManager().findFragmentById(R.id.yourFragmentId)

Ответ 2

Если фрагмент встроен в другой фрагмент, вам нужен 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();

Ответ 3

Я сделал то же самое в 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();
}

Ответ 4

Вы можете найти фрагмент, используя findFragmentById (если вы знаете компонент, в который он входит) или findFragmentByTag (если вы знаете его тег)

Я не знаю, какие переменные вы хотите обновить, но вы можете заменить фрагмент другим фрагментом, используя API FragmentTransaction.

См. http://developer.android.com/guide/components/fragments.html для примеров.