问题描述
我试图设置 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异常点之类的东西。
但是,此问题已解决。但是,如果有任何解决方案,我将不胜感激。谢谢!