gpt4 book ai didi

java - 在 Android 中创建、更新和传递数据到 Fragments 或 Activity 是否有约定?

转载 作者:太空狗 更新时间:2023-10-29 16:37:50 27 4
gpt4 key购买 nike

我有这个 Activity (Foo) 托管这个 Fragment (Bar),它充满了来自另一个 Activity 的信息。

过程是这样的:

MainActivity → Bundle → Foo → Bar → 收集数据并返回 MainActivity。

  • 我是否应该将该信息存储在 onCreateFoo Activity 的私有(private)字段中,然后让 Fragment 使用它们?
  • 我应该将 Bundle 作为参数直接传递到我的 Bar fragment 吗?
  • 我应该用收到的 Bundle 制作一个新的 Bundle 并将新的 Bundle 传递给 Fragment 吗?
  • 我是应该在每次数据发生变化时完全替换整个 fragment ,还是应该只更新变化的 View ,当数据不是由用户直接提供时,例如通过对话?

该 fragment 只有一个 View ,其值可能会被更改,但是这个值必须被格式化(它是从一个对话框中接收到的)。

  • 我是否应该只将变化的值存储在我的 Activity 的私有(private)字段中,并在我必须更新 View 或在 Activity 完成时检索结果时访问它?
  • 我是否应该在这样的 View 上实现一个适配器,以便它存储值,但向用户显示格式化信息?
  • 当我必须返回收集的数据时,我是否应该将格式化后的值存储在 View 中并将其解析回我需要接收其中包含的信息的原始值?
  • 我是否应该存储收集到的所有信息,用之前收集的信息替换新的 fragment (通过使用第一部分中的方法之一)?

是否有一个约定涵盖将数据从一个 Activity 传递到另一个 Activity ,以及如何在第二个 Activity 的生命周期中使用数据?或者至少是某种最佳实践

编辑:

我知道如何完成上述所有要点,所以我不要求代码;问题是我发现在将数据从主要 Activity 传递到子 Activity 的方式、将数据传递到 fragment 的方式以及在数据更改的情况下如何更新 fragment 之间缺乏同质性。

最佳答案

我认为您正在寻找将数据从 Fragment bar 传递到 Activity foo 的方法称为 onAttach。当 Activity 首次启动 fragment 并传递给 fragment 本身时,将调用此方法。为 fragment 用于将数据传回 Activity 的 Activity 创建一个接口(interface)。 Activity 可以直接将数据传递给 fragment 。

  • 问题是我发现将数据传递给 Activity 的方式缺乏同质性

    您通过接口(interface)将数据从 fragment 传递到 Activity

  • 我如何将它传递给 fragment

    直接通过公共(public)方法将数据传递给 fragment (也就是说,如果 fragment 是 Activity 的。如果您正在实例化 fragment ,请使用 Bundle 和 Arguments)

  • 以及在数据更改的情况下如何更新 fragment

    如果 Activity 中的值发生变化并且您想要通知 fragment 显示新内容,请创建一个公共(public)方法并从 Activity 中调用它。 mFragment.updateView();

我知道你没有要求代码,但这是基本概念。

接口(interface):

public interface MyActivityInterface {

public void passInformationToActivity(Object obj);

}

Activity :

public class MyActivity implements MyActivityInterface {

private MyFragment myFragment;

@Override
public void passInformationToActivity(Object obj) {
Log.e(TAG, "Information was passed to the activity");
}

public void sendInformationToFragment(Object obj) {
myFragment.sendInformation(obj);
}
}

fragment :

public class MyFragment extends Fragment {

private MyActivityInterface mInterface;

@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mInterface = (MyActivityInterface) activity;
catch (ClassCastException e) {
Log.e(TAG, "Calling activity must implement MyActivityInterface");
throw e;
}
}

@Override
public void onDetatch() {
super.onDetatch();
mInterface = null;
}

private void notifyActivityOfObject(Object obj) {
mInterface.passInformationToActivity(obj);
}

public void sendInformation(Object obj) {
Log.e(TAG, "Object received by Fragment");
}
}

fragment 可以通过 MyActivityInterface 与 Activity 对话, Activity 可以通过直接调用 fragment 的公共(public)方法与 fragment 对话。

希望这有助于/回答您的问题。如果没有,我很乐意尝试提供更多帮助

关于java - 在 Android 中创建、更新和传递数据到 Fragments 或 Activity 是否有约定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24156954/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com