Android ImageView未随setImageResource()更改?

Android ImageView未随setImageResource()更改?,android,Android,代码如下: public class MainActivity extends AppCompatActivity implements View.OnClickListener{ ImageView button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.

代码如下:

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

  ImageView button;



 @Override
   protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    button = (ImageView)findViewById(R.id.startButton);
    button.setOnClickListener(this);
    button.setImageResource(R.drawable.play);
}
    public void onClick(View v) {
        button.setImageResource(R.drawable.pause);
    }
}
显然,如果我按下
按钮.setImageResource(R.drawable.pause)
在onCreate中工作并更改图像,但在onClick中不工作?我试着调试它,它运行onClick代码,但没有改变按钮图像。我可能犯了一个非常愚蠢的错误,但我想不出来

xml:


您最好将ImageView self设置为ClickListener

确保使用

android:src

要在xml中设置初始图像,请尝试以下代码并告诉我结果:

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

      ImageView button;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            button = (ImageView)findViewById(R.id.startButton);
            button.setOnClickListener(this);
            button.setImageResource(R.drawable.play);

        }
        public void onClick(View v) {
            button.setImageResource(R.drawable.pause);
        }
    }
在xml中:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.example.larry.app.MainActivity"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
   <ImageView
        android:id="@+id/startButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clickable="true" />
</LinearLayout>


在OnClick中有一个switch语句,当我按下
按钮时,setImageResource(R.drawable.pause)在切换之前,即使OnClick激活,它也不总是激活。当我单击一个按钮时,会执行android.os.SystemClock.sleep,这会阻止图像交换。当按下另一个按钮时,时钟不休眠,因此图像可以成功切换

在更改imageView的源代码时,我遇到了Larry在使用
setImageResource
方法时遇到的相同问题。对我来说,这是在尝试使用交换机时发生的,但情况不同。如果有人觉得它有用,我将从代码中解释我是如何使用变通方法的

场景

对我来说,我在一个活动中有一个recyclerView,根据选择,它将使用意图启动另一个活动,新活动中的小部件将通过单击recycler视图(包括imageView)进行操作

解决方案

在新类中使用If或开关不起作用(这就是问题所在)。我所做的是在我的recycler视图的自定义适配器中,我使用了一个If条件(同样,开关将不工作),如下所示

具有回收者视图的活动类别

`@凌驾 public void onBindViewHolder(@NonNull MyViewHolder,int位置) { holder.indextview.setText(String.valueOf(位置+1)); holder.nameTextView.setText(String.valueOf(name.get(position)); holder.gradeTextView.setText(String.valueOf(grade.get(position))

这里的重要部分是将资源ID作为字符串从
putExtra
方法传递

if(novaGroup.get(position).equals(1))
    i.putExtra("PRODUCT_NOVA_GROUP", R.drawable.nova_grade_1);
else if(novaGroup.get(position).equals(2))
    i.putExtra("PRODUCT_NOVA_GROUP", R.drawable.nova_grade_2);
else if(novaGroup.get(position).equals(3))
    i.putExtra("PRODUCT_NOVA_GROUP", R.drawable.nova_grade_3);
else
    i.putExtra("PRODUCT_NOVA_GROUP", R.drawable.nova_grade_4);
来自新活动的班级

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_displaying_product_details);

    Bundle extras = getIntent().getExtras();
    novaGroupImage = findViewById(R.id.novaGroupImage);

    novaGroup = extras.getInt("PRODUCT_NOVA_GROUP");
    novaGroupImage.setImageResource(novaGroup);

}
这里的重要部分是在
onCreate
方法中使用资源ID

Bundle extras = getIntent().getExtras();
novaGroupImage = findViewById(R.id.novaGroupImage);

请展示您的xml。我不认为这是xmlI重做示例中的代码,它工作正常(setImageResource工作)。您没有添加其他内容吗?我实际上不认为还有任何其他内容会影响它。奇怪的是,这个按钮。setImageResource(R.drawable.pause);在onCreate()中工作,但在onClick()中不工作尽管调用了onClick(),但我确信我更改了项目代码以匹配此代码,我认为问题可能是xml中的android:src是永久性的,但这并没有解决它。啊哈,我明白了!我测试了两个代码(你的和我的)在我的简单例子中工作。检查您的项目并根据答案尝试找到解决方案。祝您好运
@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_displaying_product_details);

    Bundle extras = getIntent().getExtras();
    novaGroupImage = findViewById(R.id.novaGroupImage);

    novaGroup = extras.getInt("PRODUCT_NOVA_GROUP");
    novaGroupImage.setImageResource(novaGroup);

}
Bundle extras = getIntent().getExtras();
novaGroupImage = findViewById(R.id.novaGroupImage);