Android 如何在屏幕上显示的两个片段之间传递数据?

Android 如何在屏幕上显示的两个片段之间传递数据?,android,android-fragments,android-activity,android-fragmentactivity,Android,Android Fragments,Android Activity,Android Fragmentactivity,我有一个充满图像的Gridview,当你点击其中一个图像时,它会启动一个detais活动。 一切都很好,但现在我想做一个主细节布局。因此,我创建了“layout land”文件夹,它不是一个gridview,而是: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_widt

我有一个充满图像的Gridview,当你点击其中一个图像时,它会启动一个detais活动。
一切都很好,但现在我想做一个主细节布局。因此,我创建了“layout land”文件夹,它不是一个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>


在此之前,我将细节数据作为额外的意图传递,并在片段中检索它。

但是,当我在同一个屏幕上显示所有内容时,如何传递数据,以便在单击图像时更新详细信息而不启动新活动?谢谢。

我在另一个SO链接上发布了完整答案@。只要找到我的用户名,这是该帖子的唯一答案。让我们知道您的进度。

因为您的布局中有一个静态片段,我认为您不会删除它,所以我建议使用如下简单逻辑:

在您的活动中,创建一个方法来更新静态
片段
,如下所示:

public void updateImage(String imageUrl) {
    DetailActivityFragment fragment= (DetailActivityFragment) getSupportFragmentManager().findFragmentById(R.id.fragment);
    if (fragment != null) {
        fragment.updateImage(imageUrl);
    }
}
无论何时单击图像,都可以调用此方法


在片段内部,将图像加载到
ImageView
(您应该有一个)。

使用EventBus by square

创建总线对象并将其注册到活动中

Bus bus = new Bus();
bus.register(this);
在活动中创建一个
public
方法,并将参数作为模型

@Subscribe 
public void getDataFromGrid(MainGridItem item) {
    // TODO: React to the event somehow!
}
GridView
onItemClick
发布项目-

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

您可以使用

Fragment fragment = getFragmentManager().findFragmentById(R.id.fragmentLoadingSpace)
if(fragment instanceof  Fragment1){
    ((Fragment1) fragment).updateSelectedObjec(Objects object);
}
简单。

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

该文档是我找到的最简单的主细节片段示例。如果这是一个重复的文档,那么您应该对其进行投票,而不是发布一个只指向另一篇文章的链接答案。@MikeM。下次我会考虑的。我不愿意投票给任何重复的帖子,然后它可能会被关闭,就像其他人投票一样。我记得有一次,我在别人的另一篇文章中不同意这个观点。