【问题标题】:ImageView not changing with setImageResource()?ImageView 不随 setImageResource() 改变?
【发布时间】:2022-02-23 19:40:05
【问题描述】:

代码如下:

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);
    }
}

显然,如果我将 button.setImageResource(R.drawable.pause); 放在 onCreate 中,它可以工作并更改图像,但不能在 onClick 中?我尝试调试它,它运行了 onClick 代码,但没有更改按钮图像。我可能犯了一个非常愚蠢的错误,但我无法弄清楚。

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>

【问题讨论】:

  • 请向我们展示您的 xml
  • 我不认为它是 xml
  • 我在一个例子中重做了你的代码,它工作正常(setImageResource 工作)。你没有添加其他的东西吗?
  • 我实际上不认为theres任何其他会影响它。奇怪的是 button.setImageResource(R.drawable.pause);在 onCreate() 中有效,但在 onClick() 中有效,即使 onClick() 正在被调用,我很确定

标签: android


【解决方案1】:

确保你使用

android:src

在 xml 中设置初始图像。

【讨论】:

    【解决方案2】:

    你最好设置 ImageView self OnClickListener

    【讨论】:

      【解决方案3】:

      你能试试这个代码然后告诉我结果吗:

      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>
      

      【讨论】:

      • 我更改了项目代码以匹配这个,我认为问题可能是 xml 中的 android:src 是永久性的,但没有解决它。
      • 啊哈,我明白了!我在我的简单示例中测试了两个代码(你的和我的)的工作。检查您的项目并根据答案尝试找到解决方案。祝你好运
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        在更改 imageView 的源时,我偶然发现了 Larry 在使用 setImageResource 方法时遇到的相同问题。对我来说,这发生在尝试使用开关但用于不同场景时。万一有人觉得它有帮助,我将解释我如何从代码中使用解决方法。

        场景

        对我来说,我在一个活动中有一个 recyclerView,并且根据选择,它将使用 intent 启动另一个活动,并且新活动中的小部件将是通过点击回收视图进行操作,包括 imageView

        解决方案

        在新类中使用 IfSwitch 不起作用(这是问题所在)。我所做的是在我的回收站视图的自定义适配器中,我使用了一个 If 条件(再次切换将不起作用),如下所示,

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

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

            holder.itemView.setOnClickListener(v ->
            {
                Intent i = new Intent(context, DisplayingProductDetails.class);
        
                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 if(novaGroup.get(position).equals(4))
                    i.putExtra("PRODUCT_NOVA_GROUP", R.drawable.nova_grade_4);
        
                activity.startActivityForResult(i, 1);
            });
        }`
        

        这里的重要部分是将资源 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);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-04-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多