2013-02-26 2 views
3

Я был новичком в Android и нашел хорошие учебные пособия в Интернете, поэтому я попробовал простую деятельность с помощью инструкции if-else. Я пытаюсь «правильное и неправильное» приглашение/Toast:if else statement in android

Button page1 = (Button) findViewById(R.id.button2); 
     page1.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View view) { 
       final ImageView iv1 = (ImageView) findViewById(R.id.imageView1); 
       if (iv1.equals(R.drawable.airplane1)) { 
        Toast.makeText(getApplicationContext(), "Correct", 
          Toast.LENGTH_SHORT).show(); 
       } else if (iv1.equals(R.drawable.airplane2)) { 
        Toast.makeText(getApplicationContext(), "Please put an answer", 
          Toast.LENGTH_SHORT).show(); 
       } else if (iv1.equals(R.drawable.airplane3)){ 
        Toast.makeText(getApplicationContext(), "Wrong", 
          Toast.LENGTH_SHORT).show(); 
       } 
      } 

     }); 

Я не уверен, что это неправильно в моем if-else заявлении, но никогда не требует вообще. Я попытался удалить (iv1.equals(R.drawable.airplane3)) и (iv1.equals(R.drawable.airplane2)), тогда он показывает только тост. Кажется, я не могу сделать правильный ответ, чтобы рассказать мне.

Вот полный код моего класса:

public class MainActivity extends Activity { 
private static final Random imagerandom = new Random(); 

private static final Integer[] Imagesnumber = 
    { R.drawable.airplane1, R.drawable.airplane2, R.drawable.airplane3, }; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Integer a = Imagesnumber[imagerandom.nextInt(Imagesnumber.length)]; 
    final ImageView iv = (ImageView) findViewById(R.id.imageView1); 

    View nextButton = findViewById(R.id.button1); 
    nextButton.setOnClickListener(new Button.OnClickListener() { 
     public void onClick(View V) { 
       int resource = Imagesnumber[imagerandom.nextInt(Imagesnumber.length)]; 
       iv.setImageResource(resource); 
     } 
    }); 
    Button page1 = (Button) findViewById(R.id.button2); 
     page1.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View view) { 
       final ImageView iv1 = (ImageView) findViewById(R.id.imageView1); 
       if (iv1.equals(R.drawable.airplane1)) { 
        Toast.makeText(getApplicationContext(), "Correct", 
          Toast.LENGTH_SHORT).show(); 
       } else if (iv1.equals(R.drawable.airplane2)) { 
        Toast.makeText(getApplicationContext(), "Please put an answer", 
          Toast.LENGTH_SHORT).show(); 
       } else if (iv1.equals(R.drawable.airplane3)){ 
        Toast.makeText(getApplicationContext(), "Wrong", 
          Toast.LENGTH_SHORT).show(); 
       } 
      } 

     }); 




} 

} 
+0

Позвольте мне увидеть, если я вас правильно понимаю, вы пытаетесь увидеть, что изображение отображается в Yout, ' iv1'? –

+0

Да, я пытаюсь проверить, правильно ли отображается изображение, отображаемое в iv1, с помощью if else. Я не совсем уверен, что не так в моем заявлении if else – NewbieontheSide

+0

вам не хватает условия else.i означает условие, которое doesnt удовлетворяют 3 из ifs, которые вы указали –

ответ

2
iv1.getDrawable().getConstantState().equals(getResources().getDrawable(R.drawable.airplane1).getConstantState())                                                                                                            
+0

+1 для дайте нам знать .... Всегда ли это работает? ..Я пробовал это и работает – Pragnani

+0

еще один вопрос, на мой взгляд, заключается в том, что это загружает память для загрузки изображений? потому что я боюсь, что я могу получить ошибку outofmemory error в logcat – NewbieontheSide

2

R.drawable.airplane* является INT, что означает, что вы сравниваете объект ImageView с междунар, который никогда не верно. Используйте iv.getDrawable().equals(getResources().getDrawable(R.drawable.airplane1)); для сравнения с Drawable objects.

Это, вероятно, не самый лучший вариант производительности, вы можете отслеживать индекс отображаемого изображения в качестве переменной класса и выполнять условное условие (или что-то в этом направлении).

+0

Здравствуйте invertigo I've попробовал то, что вы предложили с этим «, если (iv1.getDrawable() == GetResources(). GetDrawable (R.drawable.airplane1)) { \t \t \t \t \t \t Toast.makeText (getApplicationContext(), "правильный", \t \t \t \t \t \t \t \t Toast.LENGTH_SHORT).показать(); \t \t \t \t \t \t \t \t \t \t \t} " i'm все еще получаю неправильный тост – NewbieontheSide

1

Вы не можете сравнивать тип ImageView с типом Int

iv1.equals(R.drawable.airplane1) 

это неправильно

попробовать этот

iv.getDrawable()==getResources().getDrawable(R.drawable.airplane1) 

вместо

+0

Привет Pragnani I've пробовал с этим " если (iv.getDrawable() == GetResources() .getDrawable (R.drawable.airplane1)) {\t \t \t \t \t \t Toast.makeText (getApplicationContext(), "Правильное", \t \t \t \t \t \t \t \t Toast.LENGTH_SHORT) .show(); \t \t \t \t \t \t \t \t \t \t \t} иначе, если (iv.getDrawable() == GetResources(). GetDrawable (R.drawable.airplane2)) {\t \t \t \t \t \t Toast.makeText (getApplicationContext(), "Пожалуйста, поставьте ответ", \t \t \t \t \t \t \t \t Toast.LENGTH_SHORT) .show(); \t \t \t \t \t} иначе, если (iv.getDrawable() == GetResources(). GetDrawable (R.drawable.airplane3)) {\t \t \t \t \t \t Toast.makeText (getApplicationContext(), "неправильно", \t \t \t \t \t \t \t \t Toast.LENGTH_SHORT) .show(); \t \t \t \t \t}» – NewbieontheSide

+0

теперь Безразлично' подскажите что-нибудь вообще, я думаю, я ошибалась в своих кодах – NewbieontheSide

+0

использование @NewbieontheSide SetTag и GetTag Comparision или setContentDescription и getContentDescription для imageviews .. – Pragnani

0

Вы сравниваете ImageView экземпляры и int s, правильный способ проверки который точка зрения была нажата является:

if (iv1.getId() == R.id......) { ... 

таким образом, вы сравниваете в int с другим int