【问题标题】:How to get context for Gilde from interface如何从界面获取 Gilde 的上下文
【发布时间】:2018-09-14 04:07:54
【问题描述】:

我正在尝试使用 Glide 加载图片。 Glide 需要上下文/片段/活动/视图...

我有片段,并且在片段中我实现了接口。我收到的数据来自 MainActivity 并通过接口传输。 我传输的数据是图像路径,我想用这个图像路径加载 Glide。

问题是我需要 Glide 的上下文/片段/活动/视图。

例如

    public class MyAccountFragment extends Fragment implements View.OnClickListener,
                                       ChangeProfileImgDialog.OnPhotoReceivedListener{


      @Override
public void getImagePath(Uri imagePath) {
    if( !imagePath.toString().equals("")){
        mSelectedImageUri = imagePath;
        mSelectedImageBitmap = null;
        Log.d(TAG, "getImagePath: got the image uri: " + mSelectedImageUri);
        Glide.with(**What should i do here **).load(imagePath).into(cvUserProfileImage);
    }
}


@Override
public void getImageBitmap(Bitmap bitmap,Context context) {
    if(bitmap != null){
        mSelectedImageUri = null;
        mSelectedImageBitmap = bitmap;
        Log.d(TAG, "getImageBitmap: got the image bitmap: " + mSelectedImageBitmap);
    }
}

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View v = inflater.inflate(R.layout.fragment_my_account, container, false);
     return v;
  }


     @Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    }

这就是代码,我尝试了几件事,但没有任何效果。 我总是为空。我该如何解决这个问题?

【问题讨论】:

    标签: android


    【解决方案1】:

    只需使用片段的 getContext() 方法来获取您的上下文。这将是主机活动(与调用 getActivity() 相同,它只是作为上下文强制转换)。

    如果在调用片段的 onAttach 方法之前调用,这些方法都不会起作用。当片段附加到您的活动时,将调用 onAttach。在此之前,它无法获取上下文。我建议让您的接口方法将 uri 保存到局部变量,然后您可以在 onAttach 之后或内部进行调用以加载它。

    但是,如果 cvUserProfileImage 是片段的一部分,则需要在 onCreateView 中扩充布局后执行此操作。否则,它还没有被创建。我不确定你从哪里得到这个变量。

    代码看起来像:

    public class MyAccountFragment extends Fragment implements View.OnClickListener,
            ChangeProfileImgDialog.OnPhotoReceivedListener {
    
        private Uri mSelectedImageUri;
        private Bitmap mSelectedImageBitmap;
        private ImageView cvUserProfileImage;
    
    
        @Override
        public void getImagePath(Uri imagePath) {
            if (!imagePath.toString().equals("")) {
                mSelectedImageUri = imagePath;
                mSelectedImageBitmap = null;
                Log.d(TAG, "getImagePath: got the image uri: " + mSelectedImageUri);
            }
        }
    
    
        @Override
        public void getImageBitmap(Bitmap bitmap, Context context) {
            if (bitmap != null) {
                mSelectedImageUri = null;
                mSelectedImageBitmap = bitmap;
                Log.d(TAG, "getImageBitmap: got the image bitmap: " + mSelectedImageBitmap);
            }
        }
    
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            View v = inflater.inflate(R.layout.fragment_my_account, container, false);
    
            cvUserProfileImage = v.findViewById(R.Id.cvUserProfileImage);
            if (mSelectedImageUri != null) {
                Glide.with(getContext()).load(mSelectedImageUri).into(cvUserProfileImage);
            } else if (mSelectedImageBitmap != null){
                cvUserProfileImage.setImageBitmap(mSelectedImageBitmap);
            }
    
            return v;
        }
    }
    

    【讨论】:

    • 我做了“getActivity()”,但我得到了空值。我认为那是因为该片段尚未加载。如您所见,该方法位于“onViewCreated”之前
    • 哦,我明白了。您可以将 url 保存到实例变量中,然后将其加载到 OnAttach 中。我会更新答案。
    • 像你说的 cvUserProfileImage,它在“onCreateView”上膨胀,所以我应该创建一个本地病毒并将数据保存在该病毒上。那我该怎么办?
    • 它不起作用。我添加了这些代码行。该应用程序没有崩溃,但它也没有改变图片。
    • 你能在滑行线上放一个断点并确保这些值都不为空(视图或 URL)吗?如果它们都不为空,请尝试硬编码此 uri 并查看 fi glide 加载此图像:opensource.google.com/assets/static/images/home/blog/… 如果是这样,则可能是您使用的 URL 存在问题。如果没有,可能是 Glide 配置不正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    • 2016-06-30
    相关资源
    最近更新 更多