ImageView没有用setImageResource()改变?

时间:2017-11-18 00:33:41

标签: android

以下是代码:

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>

5 个答案:

答案 0 :(得分:0)

你最好设置ImageView self OnClickListener

答案 1 :(得分:0)

确保使用

android:src

在xml中设置初始图像。

答案 2 :(得分:0)

您可以尝试使用此代码并告诉我结果:

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>

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

场景

对我来说,我在一个活动中有一个 recyclerView 并且根据选择,它将使用 intent 启动另一个活动,新活动中的小部件将是通过单击包括 imageView

的回收器视图进行操作

解决方案

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

使用回收器视图的活动类别

`@覆盖 public void onBindViewHolder(@NonNull MyViewHolder holder, int position) { holder.indexTextView.setText(String.valueOf(position + 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);