【发布时间】: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