2013-02-26 3 views
3

나는 안드로이드에서 새로 왔으며 인터넷에서 좋은 자습서를 발견 했으므로 나는 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

와 함께 int을 비교하는이 방법 제가 당신'이 행해져 Yout에 표시되는 이미지 참조하려고하는, 제대로 이해하는지 확인하자 iv1'? –

+0

예 iv1에 표시되는 이미지가 맞는지 틀린지를 확인하려고합니다. if else 문에서 틀린 것이 무엇인지 확실하지 않습니다. – NewbieontheSide

+0

else 조건이 누락되었습니다. 당신이 지정 한 ifs 중 3 개를 만족한다면 –

답변

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

+1 알려주세요. ... 항상 이런 식으로 작동합니까? ...나는 이것을 시도하고 작동하고있다 – Pragnani

+0

다시 내 마음에 하나의 질문은 이미지를로드하기위한이로드 메모리를합니까? 내가''logcat에 outofmemory 오류가 발생할 수 있습니다. – NewbieontheSide

2

R.drawable.airplane* 당신이 진정한 결코를 int로 이미지 뷰 객체를 비교하는 것을 의미하는 int입니다 :

여기 내 클래스의 전체 코드입니다. Drawable 개체와 비교하려면 iv.getDrawable().equals(getResources().getDrawable(R.drawable.airplane1));을 사용하십시오.

이것은 성능면에서 최선의 옵션이 아닐 수 있습니다. 클래스 변수로 표시된 이미지의 인덱스를 추적하고 그 라인을 따라 조건부를 기반으로 할 수 있습니다.

+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} 경우 (iv.getDrawable() ==의 GetResources " 나는'여전히 잘못된 토스트 – NewbieontheSide

1

당신은 INT

iv1.equals(R.drawable.airplane1) 

의 종류에 이미지 뷰의 유형을 비교할 수 없습니다이

당신은 ImageView 인스턴스를 비교하는이

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

대신

+0

안녕하세요 Pragnani을 받고 i've이 으로 그것을 시도"() .getDrawable (R.drawable.airplane1)) { \t \t \t \t \t \t Toast.makeText (getApplicationContext(), "Correct", \t \t \t \t \t \t \t \t 토스트 .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()) .show(), \t \t \t \t \t \t \t \t Toast.LENGTH_SHORT을 "대답을 넣어주세요"; \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

지금은 전혀 아무것도하라는 메시지가 어쩌려 구't, 난 내가 본 적 hvae 내 코딩 imageviews에 대한 – NewbieontheSide

+0

@NewbieontheSide 사용의 SetTag 및 GetTag의 용을 비교 한 또는 setContentDescription 및 getContentDescription .. – Pragnani

0

을 시도 잘못 및 int s의 올바른 방법은 이는보기 클릭 한은 다음과 같습니다

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

다른 int