2017-01-17 445 views
0

Goal:
Когда я нажимаю кнопку «бросок», изображение должно быть заменено на другое изображение в режиме реального времени.Изменить картинку при нажатии на кнопку

Задача:
Что не так с кодом? Я должен нажать дважды, чтобы изменить изображение.

Информация:
* Использование Android API 25 и с помощью инструмента Android Studio

package com.jfdimarzio.dice; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 

public class MainActivity extends AppCompatActivity 
{ 

    ImageView image; 


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

    public void throwDice(View v) 
    { 

     image = (ImageView) findViewById(R.id.dice_grey_3); 

     Button button = (Button) findViewById(R.id.btnThrow); 

     button.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View arg0) 
      { 
       image.setImageResource(R.drawable.red1); 
      } 

     }); 
    } 

} 

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.jfdimarzio.dice.MainActivity"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Hello World!" /> 

    <Button 
     android:text="Throw" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/btnThrow" 
     android:paddingLeft="50dp" 
     android:paddingRight="50dp" 
     android:paddingBottom="20dp" 
     android:paddingTop="20dp" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentEnd="true" 
     android:onClick="throwDice" 
     android:layout_alignParentStart="true" /> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/grey1" 
     android:id="@+id/dice_grey_1" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentStart="true" /> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     app:srcCompat="@drawable/grey2" 
     android:id="@+id/dice_grey_2" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" /> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     app:srcCompat="@drawable/grey3" 
     android:id="@+id/dice_grey_3" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentEnd="true" /> 

</RelativeLayout> 
+0

Метод: общественного недействительными throwDice (View v) никогда не использовался! – MohammedAlSafwan

+0

Функция throwdice - onclicklistener, вам не нужно определять onClicklistener снова. Просто вызовите image.setimageresource (R.drawable.red1). Удалите остальную часть кода – surya

ответ

0

БЫСТРЫЙ FIX:

public void throwDice(View v) 
{ 

    image = (ImageView) findViewById(R.id.dice_grey_3); 

    Button button = (Button) findViewById(R.id.btnThrow); 

    image.setImageResource(R.drawable.red1); 
} 

Почему это работает?

Существует два способа прослушивания щелчка на Android, либо программно с использованием Java, либо с использованием XML. Вы сделали то, что вы ввели оба эти вложенных. В итоге для получения конечного результата требуется два клика. Либо вы можете использовать или throwDice() метод onClickListener() который вы определили в XML: android:onClick="throwDice"

2

Поскольку вы задаете OnClick для кнопки здесь: android:onClick="throwDice" будет зарегистрировать. Но когда его снова нажмут, метод throwDice зарегистрирует другой прослушиватель onclick, таким образом изменив старый прослушиватель на новый. И при повторном нажатии на него будет запущен новый слушатель, который изменит изображение, которое будет исполнять это: image.setImageResource(R.drawable.red1);

Теперь вам нужно только зарегистрировать слушателя только один раз. Эфир по xml или программно.

+0

Благодарим за помощь !. Я новичок в Android и у вас есть предложение исходного кода. С моей стороны это легче понять по отношению к исходному коду. Опять же, я новичок в Android. –