无法为ImageButton设置setImageResource

问题描述

我试图设置 ImageButtom.setimageResource() ,而不会被点击

使用onClickListener 时,它有效

类似这样的东西:

Key.setonClickListener(new View.OnClickListener() {
        @Override
        public void onClick(final View v) {
          ((ImageButton)v).setimageResource(R.drawable.ic_heart);  

        }
    });

但是,当我尝试更改ImageResource 而没有被点击时,如下所示:

key.setimageResource(R.drawable.ic_heart);

不起作用。而且我不知道为什么?

在我的代码中,有 conditional statement 项,我想根据其中更改 ImageResource 适合的地方,但我无法做到。

有人知道如何更改它而无需单击??

这是我对public View getView GRIDVIEW的完整代码

 name = v.findViewById(R.id.Name);
    itemImageView = v.findViewById(R.id.Image);
    Key = v.findViewById(R.id.LikeKey);

    name.setText(data.getITEM_NAME());
    Glide.with(context).load(data.getITEM_IMAGE()).into(itemImageView);

    itemImageView.setonClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(context,"You have selected " + 
  data.getITEM_NAME(),Toast.LENGTH_SHORT).show();
            context.startActivity(new Intent(context,Detail.class).putExtra("activity","foodlist")
                    .putExtra("type",data.getTREE()));
        }
    });

    final ValueEventListener eventListener= new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {

            if (snapshot.exists()) {
                for (DataSnapshot ds : snapshot.getChildren()) {

                    if 
        (dataList.get(position).getITEM_KEY().equals(ds.getKey())) {
                        
       reference.child(dataList.get(position).getITEM_KEY()).removeValue();
                        if (map.size()!=0){
                            map.clear();
                        }
                    }
                    else{
                        
        reference.updateChildren(map).addOnCompleteListener(new OnCompleteListener<Void>() {
                            @Override
                            public void onComplete(@NonNull Task<Void> task) {
                                if (task.isSuccessful()) {
                                   
     //Since this line is not working 
     //Key.setimageResource(R.drawable.ic_heart))
    //I use this instead
   ((ImageButton)click).setimageResource(R.drawable.ic_heart);
                                }
                            }
                        });
                    }

                }

            }else{
                reference.setValue(map).addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        if (task.isSuccessful()) {

                            ((ImageButton)click).setimageResource(R.drawable.ic_heart);

                        }
                    }
                });
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    };

    final String key= data.getITEM_KEY();
    final String name= data.getITEM_NAME();

    Key.setonClickListener(new View.OnClickListener() {
        @Override
        public void onClick(final View v) {
            click=v;
            map.put(key,name);
            reference.addListenerForSingleValueEvent(eventListener);

        }
    });

   
//Checking availability
    {
  
    reference1.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {

            if (snapshot.exists()){

                for (DataSnapshot ds: snapshot.getChildren()){

                    if (dataList.get(position).getITEM_KEY().equals(ds.getKey())) {
                 //this line is not working
                        Key.setimageResource(R.drawable.ic_heart);

                    }

                }

            }

        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });
    }

XML 代码

<ImageButton
            android:id="@+id/LikeKey"
            android:layout_marginTop="180dp"
            android:layout_marginStart="140dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginEnd="5dp"
            android:background="?attr/selectableItemBackground"
            app:srcCompat="@drawable/ic_heart2" />

解决方法

这简直令人困惑。将其减少到应该工作的最简单的部分。您确定在拥有此Key.setImageResource(R.drawable.ic_heart)的if语句中可以访问代码吗? ?

如果一切相同,则应该可以正常工作。但是,它不起作用。 键= v.findViewById(R.id.LikeKey); (((ImageButton)click).setImageResource(R.drawable.ic_heart);

Key是否像单击ImageButton一样具有适当的宽度高度和contentType以适合ImageResource ic_heart?

,

我终于解决了此问题,不是针对该问题的修复,而是一种解决方法

已初始化Key

Key = v.findViewById(R.id.LikeKey);,在没有使用其他名称的地方重新初始化了ImageButton,然后终于开始了方法.setImageResource加工。我不知道为什么,但是从我的Key上面的代码看来,我没有引用它,或者在我运行代码时它以某种方式返回了null,但是我没有发现任何错误,例如null异常点之类的东西。

但是,此问题已解决。但是,如果有任何解决方案,我将不胜感激。谢谢!