Android - 来自片段的getIntent()

Sti*_*ode 17 android android-intent android-fragments

我试图将位图从一个片段传递到另一个片段 - 我正在使用这篇文章作为指南:

使用intent Android发送位图

我遇到的问题是使用getIntent()在接收活动片段中.它无法识别该方法.那里有一些帖子说它不可能在片段中使用getIntent()但是必须有办法吗?代码是否应该进入主机活动?

这是我正在尝试的:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    String filename = getIntent().getStringExtra("image");
    try {
        FileInputStream is = this.openFileInput(filename);
        imageBitmap = BitmapFactory.decodeStream(is);
        is.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 39

您可以使用getIntent(),Fragments但需要先拨打电话getActivity().有点像getActivity().getIntent().getExtras().getString("image")可以工作.


Ali*_*deh 8

您还可以Fragment使用setArguments()和来实现此目的getArguments(),如下所示:

MyFragment fragment = new MyFragment();
Bundle bundle = new Bundle();
bundle.putString("image", fileName);
fragment.setArguments(bundle);//Here pass your data
Run Code Online (Sandbox Code Playgroud)

现在在您的片段类中,例如在内部onCreate()或onCreateView()执行以下操作:

String fileName = this.getArguments().getString("image");
Run Code Online (Sandbox Code Playgroud)


Bla*_*rai 5

不是因为您无法传递数据,而是因为您不想传递数据。

从片段文档中:

通常,您会希望一个Fragment与另一个Fragment进行通信,例如,根据用户事件更改内容。所有片段到片段的通信都是通过关联的活动完成的。两个片段永远不要直接通信。

如果您看一下Fragment文档,它应该引导您完成该操作。

  • 对此进行投票不是因为它解决了问题,而是正确的方法。您应该将活动用作“媒介”,以使片段彼此通信。 (2认同)