【问题标题】:Passing Objects to fragment without argument将对象传递给片段而不使用参数
【发布时间】:2018-12-07 21:58:15
【问题描述】:

如果我将object 传递给fragment 而不使用bundle 会有什么影响?我刚刚打开了其中一个旧代码并在那里找到了它,并且忍不住问了这个问题,因为我从未尝试过。我也没有发现任何内存泄漏。

这就是它的实现方式-

活动类:

MyFragment fragment =
        MyFragment.newInstance(getIntent().getStringExtra(DATA),
            instance.getCallback(),
            instance.getRequest());
    getSupportFragmentManager().beginTransaction().replace(R.id.content, fragment).commit();

片段类:

public class MyFragment extends Fragment {

  public MyFragment() {
    /* Required empty public constructor */
  }

  public static MyFragment newInstance(String data, Callback callback,
      Request request) {
    MyFragment fragment = new MyFragment();
    fragment.setCallback(callback);
    fragment.setRequest(request);
    fragment.setData(data);
    return fragment;
  }

  private void setCallback(Callback callback) {
    this.callback = callback;
  }

  private void setData(Data data) {
    this.data = data;
  }

  private void setRequest(Request request) {
    this.request = request;
  }
}

总的来说,到目前为止我使用的是Fragment#setArguments(Bundle)

【问题讨论】:

  • 如果您使用片段外部的数据,即来自单例类的getter setter,那么显然数据将不是片段的属性。您还必须努力从内存中清除这些数据。
  • 谢谢。所以你的意思是在这种情况下存在内存泄漏的机会。我没有得到任何这些。但即使我怀疑内存泄漏也会存在
  • 是的,这就是为什么禁止使用静态指针指向任何基于上下文的变量,例如视图、活动等...

标签: android object android-fragments


【解决方案1】:

请查看此答案:Why its not recommended to pass object to fragment with simple getter setter

长话短说,您将丢失有关配置更改的数据。

与片段通信主要有两种方式:通过捆绑包或通过您在活动中实现的接口。请查看此链接以了解如何通过接口与片段正确通信:https://developer.android.com/training/basics/fragments/communicating

【讨论】:

    猜你喜欢
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多