2

У меня есть Gridview, заполненный изображениями, когда вы нажимаете на одном из этих изображений, начинается действие detais.
Все хорошо работает, но теперь я хочу сделать макет «Мастер-Деталь». Так что я создал эту папку «Макет-земля» и вместо того, чтобы только GridView, это было так:Как передавать данные между двумя фрагментами, отображаемыми на экране?

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@color/background" 
tools:context=".MainActivityFragment"> 

<GridView 
    android:id="@+id/main_grid" 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:layout_weight="1" 
    android:numColumns="auto_fit" /> 

<fragment 
    android:id="@+id/fragment" 
    android:name="com.example.lucas.popularmovies.DetailActivityFragment" 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:layout_weight="2" 
    tools:layout="@layout/fragment_detail" /> 

</LinearLayout> 


До этого я проезжал данные ПОДРОБНО.Подробнее как Extra о намерении и извлечения его в Фрагмент.
Но когда я показываю все это на одном экране, как передать данные таким образом, чтобы обновлять данные, когда я нажимаю на изображение, не запуская новое действие? Благодарю.

+2

документация [связь с другими фрагментами] (http://developer.android.com/training/basics/fragments/communicating.html) является самым простым примером мастер-деталь фрагментов я нашел. –

ответ

1

Simple.

DetailActivityFragment fragment= (DetailActivityFragment) getSupportFragmentManager().findFragmentById(R.id.fragment); 
    if (fragment != null) { 
     fragment.updateImage(url); 
    } 
-1

Я отправил полный ответ на другую ссылку SO @Passing data between fragments contained in an activity. Просто найдите мое имя пользователя, и это единственный ответ на этот пост. Сообщите нам о вашем прогрессе.

+1

Если это дубликат, вы должны проголосовать за него как таковой, а не публиковать ответ только для ссылок, который просто указывает на другое сообщение. –

+0

@MikeM. Я подумаю об этом в следующий раз. Я не хочу голосовать за любую должность как дубликат, а затем она может быть закрыта, как проголосовали другие. Я помню один раз, когда я действительно не соглашался с тем, что на другом посту кто-то еще. –

0

Поскольку у вас есть статический фрагмент в макете, который я предполагаю, что вы не будете удалять, я бы сказал, использовать простую логику, как это:

В вашей деятельности, создать метод, который будет обновлять ваш статический fragment как:

public void updateImage(String imageUrl) { 
    DetailActivityFragment fragment= (DetailActivityFragment) getSupportFragmentManager().findFragmentById(R.id.fragment); 
    if (fragment != null) { 
     fragment.updateImage(imageUrl); 
    } 
} 

Всякий раз, когда вы щелкаете по изображению, вы вызываете этот метод.

И внутри вашего фрагмента загрузите свое изображение в ImageView (у вас должен быть один).

0

Используйте EventBus на квадрат.

Создание шины объекта и зарегистрировать его в деятельности

Bus bus = new Bus(); 
bus.register(this); 

Создание метода public в деятельности с аргументом в вашей модели.

@Subscribe 
public void getDataFromGrid(MainGridItem item) { 
    // TODO: React to the event somehow! 
} 

В GridViewonItemClick вывешиваем деталь -

bus.post(mainGridItems.get(position)); 
0

Вы можете найти фрагмент, используя

Fragment fragment = getFragmentManager().findFragmentById(R.id.fragmentLoadingSpace) 
if(fragment instanceof Fragment1){ 
    ((Fragment1) fragment).updateSelectedObjec(Objects object); 
} 
Смежные вопросы