java - 将弱 fragment 引用传递给列表适配器,这是一个好的做法吗?

标签 java android android-fragments weak-references

我想知道这是否是好的做法,以及何时使用弱引用是一个好主意/坏主意......

创建适配器时,我向它传递一个对 fragment 的弱引用(以便它可以使用名为“EmailOrdersButton”的接口(interface)回调 fragment ):

WeakReference<OrderHistoryListFragment> weakFragment = new WeakReference<OrderHistoryListFragment>(OrderHistoryListFragment.this);

adapter = new OrderHistoryListAdapter(getActivity(), R.layout.order_history_list_item, -1, orderHistory, isInEditMode, weakFragment);

然后在我的适配器构造函数中我有这个:

public OrderHistoryListAdapter(Context mContext, int resource, int textViewResourceId, List<MOHistory> lastTransactionList, boolean isEditModeEnable, WeakReference weakFragment) {
    mInflator = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    this.resource = resource;
    this.context = mContext;
    this.lastTransactionList = lastTransactionList;
    originalList = this.lastTransactionList;
    this.isEditModeEnable = isEditModeEnable;

    try {
        this.emailButtonCallback = ((EmailOrdersButton) weakFragment.get());
    } catch (ClassCastException e) {
        throw new ClassCastException("Fragment must implement EmailOrdersButton.");
    }
}

将 fragment 的弱引用传递给适配器是一个好的做法吗?我想确保我的应用程序具有尽可能高的内存效率

最佳答案

使用弱引用,以便 fragment 松散耦合。如果不使用弱引用,它就不会被垃圾回收,因为 fragment 维护着对它的引用。

只要 fragment 的生命周期在 Activity 的生命周期内,就不需要使用 Wea​​kReference。如果 fragment 的生存时间比 Activity 长,那么您应该使用 Wea​​kReference 来避免系统销毁 Activity 时将 Activity 保留在对象图中。

关于java - 将弱 fragment 引用传递给列表适配器,这是一个好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35479179/

相关文章:

java - 按名称删除 xml 节点并更新它

android - TabActivities 中的关键事件?

java - 从 InputStream 复制到 BufferedOutputStream

在 fragment 事务期间在 swipeRefreshLayout 上设置刷新(false)时 Android fragment 两次

java - 请问RSocket世界中的@ExceptionHandler相当于什么?

java - 如何在派生类中覆盖 `toString` 并使用基类中的私有(private)实例变量?

java - 在java中使用正则表达式匹配大文本中的内容

android - 沿路径使用渐变

android - 使用 fragment Activity 创建的 ADT 空白 Activity

android - 如何添加 TextView 的日期选择器 onclick。表单中有多个日期字段