【问题标题】:Not able to set setImageResource for ImageButton无法为 ImageButton 设置 setImageResource
【发布时间】:2020-11-30 12:25:11
【问题描述】:

我正在尝试设置 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 /strong> 适合,但我做不到。

有没有人知道怎么改不被点击???

这是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 不为空
  • 键不为空,它已经定义了。我在 GridView 中使用它。
  • 就像我上面提到的那样,在 ClickListener 下使用 .setImageResource 方法时工作正常。但是,在像示例这样的条件下使用时,变量C 中存储了超过 5 个值,现在我想更改它。我尝试使用我提到的Key.setImageResource(MyDrawableFile),它不接受更改
  • 好像少了什么我不知道的东西!!
  • 如果你在设置 onClickListener 的地方直接调用Key.setImageRes(...),这行得通吗?我的意思是用同样的方法(我猜是 onCreate)

标签: android imagebutton android-imagebutton


【解决方案1】:

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

如果一切都一样,它应该可以工作。但是它不起作用。 Key = v.findViewById(R.id.LikeKey); ((ImageButton)click).setImageResource(R.drawable.ic_heart);

Key 是否类似于单击具有适当宽度高度和 contentType 以适应 ImageResource ic_heart 的 ImageButton?

【讨论】:

  • 是的,那是一样的。但是代码不起作用。我觉得少了点什么?我无法弄清楚。也许这是我忽略的最简单的事情。
  • 我建议测试 Key 变量。编写这段代码: Key.setImageResource(R.drawable.ic_heart);它将被执行的地方。放置调试器断点并检查Key的各种参数
  • 我已经检查它正在初始化没有任何错误,但是代码执行的效果没有发生。我的意思是它没有做任何改变是一样的。 onClick 部分正在工作,甚至发生变化,但我的问题在于我使用注释提到的部分,//this line is not working 该部分没有显示代码效果。
【解决方案2】:

我终于弄明白了它不是解决问题的修复,而是一种解决方法

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

不过,问题已解决。但是,如果你们中的任何人对此有解决方案,我将不胜感激。谢谢!

【讨论】:

  • 重新初始化同一个变量的代码不是一个好方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-11
  • 1970-01-01
  • 2016-07-09
  • 2011-08-05
  • 1970-01-01
  • 2014-02-18
相关资源
最近更新 更多