Android - 在适配器中传递上下文的最佳方法(特别是`RecyclerViewAdapter`)

时间:2016-04-21 03:39:48

标签: android android-fragments android-context

RecyclerView中有Adapter Fragment。目前我正在寻找OOM原因并且Context泄漏可能是其中一个原因。

我在Adapter中获取上下文时采用了多种方法(需要Context SharedPreferencesGlide / Picasso,并替换{{ 1}})。

  1. Fragments传递给适配器构造函数,然后将其设置为适配器内的全局变量:

    Context

  2. LobbyAdapter lobbyAdapter = new LobbyAdapter(this.getActivity);中设置全局Context并从Adapter获取Context

    onCreateViewHoldercontext = parent.getContext();适配器使用new时,这会导致问题。但这必定是因为我在SwipeRefreshLayout中所做的有缺陷的逻辑,仍在追踪这一点。

  3. 不要制作全局Fragment变量,但要从Context获取与Context相关的每个View ViewHolder }}

  4. Context

    Loading an image

    The key here is using the holder to get the Context ((FriendProfileViewHolder) holder).coverPhoto.getContext()

    在这部分中,由于我对Glide.with(((FriendProfileViewHolder) holder).coverPhoto.getContext()) .load(utilities.webAddress + profileDataModel.user_cover_image_path) .diskCacheStrategy(DiskCacheStrategy.ALL) .skipMemoryCache(true) .centerCrop() .into(((FriendProfileViewHolder) holder).coverPhoto); 缺乏经验,如果一个方法被不同的Context重用,我不确定应该从哪个视图获取Context

    其他问题:(这可能需要新问题线程。)

    在多个Views中,我执行Adapters来获取服务器的响应以更改图像。我需要AsyncTask中的ContextInterface来获取应用包,并getPackageName()来访问资源。

    getResources()

    也许我应该创建一个全局变量和方法来改变这些值?

1 个答案:

答案 0 :(得分:0)

我使用了您在问题中描述的第一种方法,即通过构造函数传递Context,然后将其设置为全局变量供以后使用。这种方法适用于包含RecyclerViews的Fragments。使用它几次,它从未引起Context泄漏问题。

我没有使用任何其他方法,所以不会评论它们。