更改图像颜色 [重复]

Posted

技术标签:

【中文标题】更改图像颜色 [重复]【英文标题】:Changing Image Colour [duplicate] 【发布时间】:2018-10-24 01:17:28 【问题描述】:

我目前正在尝试更改图像视图的颜色。我正在尝试从片段中执行此操作,并且在我切换活动之前它可以正常工作。当我返回用于更改图像颜色的片段时,出现此错误,

Attempt to invoke virtual method 'int android.content.Context.getColor(int)' on a null object reference

我使用下面的代码来改变我的图像的颜色,

imgUpvote.setColorFilter(ContextCompat.getColor(getContext(), R.color.lGrey));

有人知道解决办法吗?仅当我切换活动时才会出现此错误,感谢您的任何回答。

编辑:这里是代码所在的位置,

firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<postsGetInfo, postsGetInfoViewHolder>(postsGetInfo.class, R.layout.posts_layout,postsGetInfoViewHolder.class,postRef) 
                @Override
                protected void populateViewHolder(final postsGetInfoViewHolder viewHolder, postsGetInfo model, int position) 
                    final String postKey = getRef(position).getKey();
                    UpdateTheDisplayVotes(postKey); //Displays the votes at the start of creation
                    postRef.removeEventListener(VoteListener);

                    defaultVote = VotesRef.addValueEventListener(new ValueEventListener() 
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) 
                            if (!dataSnapshot.hasChild(postKey)) 
                                VotesRef.child(postKey).child(current_user_id).child("votes").setValue("none");
                            
                            String voteStatus = dataSnapshot.child(postKey).child(current_user_id).child("votes").getValue().toString();
                           if (voteStatus.equals("upvoted"))
                                ImageView btnUpvote = viewHolder.myView.findViewById(R.id.imgUpvote);
                                ImageView btnDownvote = viewHolder.myView.findViewById(R.id.imgDownvote);
                               btnUpvote.setColorFilter(ContextCompat.getColor(getActivity(), R.color.lBlue));
                                btnDownvote.setColorFilter(ContextCompat.getColor(getActivity(), R.color.lGrey));
                            if (voteStatus.equals("downvoted"))
                                ImageView btnUpvote = viewHolder.myView.findViewById(R.id.imgUpvote);
                                ImageView btnDownvote = viewHolder.myView.findViewById(R.id.imgDownvote);
                                btnUpvote.setColorFilter(ContextCompat.getColor(getActivity(), R.color.lGrey));
                                btnDownvote.setColorFilter(ContextCompat.getColor(getActivity(), R.color.Black));
                            if (voteStatus.equals("none"))
                                ImageView btnUpvote = viewHolder.myView.findViewById(R.id.imgUpvote);
                                ImageView btnDownvote = viewHolder.myView.findViewById(R.id.imgDownvote);
                                btnUpvote.setColorFilter(ContextCompat.getColor(getActivity(), R.color.lGrey));
                                btnDownvote.setColorFilter(ContextCompat.getColor(getActivity(), R.color.lGrey));
                            
                        

【问题讨论】:

使用getActivity getActivity() 做同样的事情 分享您使用的代码imgUpvote.setColorFilter() 会的,给我一秒钟 更新了帖子,upvote/downvote的颜色将在开始时发生。 【参考方案1】:

尝试在您的fragment 中像这样获取Context

public class BlankFragment extends Fragment 


    public BlankFragment() 

    

    Context mContext;

    @Override
    public void onAttach(Context context) 
        super.onAttach(context);
        mContext = context;
    

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) 
        // Inflate the layout for this fragment


        return inflater.inflate(R.layout.fragment_blank, container, false);
    


比这样使用

kimgUpvote.setColorFilter(ContextCompat.getColor(mContext, R.color.lGrey));

【讨论】:

谢谢,我试试看 工作就像一个魅力,感谢您的精彩回答 @BenHenderson 很乐意为您提供帮助

以上是关于更改图像颜色 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

更改通过背景图像加载的 SVG 图像的填充颜色 [重复]

如何更改SVG图像的颜色[重复]

更改 img src SVG 颜色 [重复]

使用JQuery更改svg内的填充颜色[重复]

使用 CSS 更改 .png 颜色 [重复]

如何在html对象元素中更改svg位置的背景颜色[重复]