2017-04-18 9 views
1

나는 안드로이드에 초보자입니다. 사용자가 이미지를 클릭하면 이미지 설명 (AlertDialog 사용)을 표시하려고합니다. 그러나 AlertDialog 상자는 다른 이미지도 클릭하면 항상 첫 번째 저장된 메시지를 표시합니다. 다른 이미지를 클릭해도 재설정되지 않습니다. 누구든지 날 도와 줘?andriod에서 다른 이미지를 클릭 할 때마다 AlertDialog에서 메시지를 변경하는 방법은 무엇입니까?

MainActivity.java

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 

    Spinner spinner; 
    ImageView imageView,imgpt1,imgpt2,imgpt3,imgpt4; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     spinner=(Spinner)findViewById(R.id.spinner); 
     imageView=(ImageView)findViewById(R.id.imageViewspinner); 
     imgpt1=(ImageView)findViewById(R.id.imagepart1); 
     imgpt2=(ImageView)findViewById(R.id.imagepart2); 
     imgpt3=(ImageView)findViewById(R.id.imagepart3); 
     imgpt4=(ImageView)findViewById(R.id.imagepart4); 

     imgpt1.setOnClickListener(this); 
     imgpt2.setOnClickListener(this); 
     imgpt3.setOnClickListener(this); 
     imgpt4.setOnClickListener(this); 
     List<String> categories=new ArrayList<String>(); 
     categories.add("Front View"); 
     categories.add("Side View"); 
     categories.add("Back View"); 
     categories.add("Top View"); 

     ArrayAdapter<String> stringArrayAdapter=new ArrayAdapter<String>(this,R.layout.support_simple_spinner_dropdown_item,categories); 
     stringArrayAdapter.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item); 
     spinner.setAdapter(stringArrayAdapter); 
     spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
       if(position==0) 
       { 
        imageView.setImageResource(R.drawable.carfrontview); 
        imgpt1.setImageResource(R.drawable.frontbumpers); 
        imgpt1.setTag("frontbumpers"); 
        imgpt2.setImageResource(R.drawable.frontfenders); 
        imgpt2.setTag("frontfenders"); 
        imgpt3.setImageResource(R.drawable.frontgrilles); 
        imgpt2.setTag("frontgrilles"); 
        imgpt4.setImageResource(R.drawable.frontheadlight); 
        imgpt2.setTag("frontheadlight"); 
       } 
       else if(position==1) 
       { 
        imageView.setImageResource(R.drawable.carsideview); 
        imgpt1.setImageResource(R.drawable.sidebumpers); 
        imgpt2.setImageResource(R.drawable.sidedoor); 
        imgpt3.setImageResource(R.drawable.sidefuelcovers); 
        imgpt4.setImageResource(R.drawable.sidemirror); 

       } 
       else if(position==2) 
       { 
        imageView.setImageResource(R.drawable.carbackview); 
        imgpt1.setImageResource(R.drawable.backrearbumpers); 
        imgpt2.setImageResource(R.drawable.backrearmirror); 
        imgpt3.setImageResource(R.drawable.backrearwindow); 
        imgpt4.setImageResource(R.drawable.backtaillights); 
       } 
       else if(position==3) 
       { 
        imageView.setImageResource(R.drawable.cartopview); 
        imgpt1.setImageResource(R.drawable.topbattery); 
        imgpt2.setImageResource(R.drawable.topfuelinjection); 
        imgpt3.setImageResource(R.drawable.topoildipstick); 
        imgpt4.setImageResource(R.drawable.topradiator); 
       } 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> parent) { 

      } 
     }); 
    } 

    @Override 
    public void onClick(View v) { 
     String message=""; 
     if(imgpt1.getTag()=="frontbumpers") 
     { 
      message="This is Bumper"; 
     } 
     else if(imgpt1.getTag()=="frontfenders") 
     { 
      message="This is Fenders"; 
     } 
     else if(imgpt1.getTag()=="frontheadlight") 
     { 
      message="This is headlight"; 
     } 
     else if(imgpt1.getTag()=="frontgrilles") 
     { 
      message="This is grilles"; 
     } 

     AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this); 
     builder.setTitle("Car Parts"); 
     builder.setMessage(message); 
     builder.setNeutralButton("OK", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       dialog.cancel(); 
      } 
     }).create().show(); 

    } 
} 
+0

피해주십시오 이 답변들은 '동등한'제안으로 이루어집니다. 모두에게 오해의 소지가있는 대답이 있습니다. 당신은 당신이 검사하고있는'view'에 문제가 있습니다.나는 대답을 게시했다. –

답변

3

을 첫째로, 당신은 시나리오 안 모든 경우에 imgpt1을 사용하고 있습니다. 오히려 그 문자열의 비교를 위해 최선의 안드로이드 관행을 사용하려고 해결 한 후

v.getTag.equals("xxx") 

를 사용합니다.

첫번째 그런 다음 아래에 언급 된 코드를 사용하여 동일한 경우를 확인

String string1 = "abc", string2 = "Abc"; 
TextUtils.isEmpty(string1); // Returns true if the string is empty or null 

를 사용하여 널 (null)과 빈 문자열을 확인 안드로이드 (자바)에서 문자열을 확인하면서

모범 사례

string1.equals(string2) //Checks with case sensitivity 
string1.equalsIgnoreCase(string2) // Checks without case sensitivity. Here this will return true. 
+0

감사합니다. 그것은 지금 일했다 .. – user3661367

3

이 시도 ..

을 당신은 문자열은 INT 사용의 경우 ==에 .equals()를 사용 확인해야하는 경우

if(imgpt1.getTag().equals("frontbumpers")) 
{ 
    message="This is Bumper"; 
} 
else if(imgpt1.getTag().equals("frontfenders")) 
{ 
    message="This is Fenders"; 
} 
else if(imgpt1.getTag().equals("frontheadlight")) 
{ 
    message="This is headlight"; 
} 
else if(imgpt1.getTag().equals("frontgrilles") 
{ 
    message="This is grilles"; 
} 
+1

이것은 그의 문제를 해결하지 못합니다 :) 단지 equals를 사용하는 것이 좋습니다! 오해의 소지가있는 대답 –

2

온 클릭으로 사용

그들은 항상 true가됩니다로

imgpt1.getTag().equals("frontgrilles")

대신

imgpt1.getTag()=="frontgrilles" 
+0

이것은 자신의 문제를 해결하지 못합니다. 단지 'equals'을 사용하는 것이 좋습니다! 오해의 소지가있는 대답 –

+0

나는 그것을 시험해 보았다. 그러나 그것은 변하지 않습니다. – user3661367

1

의 당신은 view하지 정적 항목의 태그를 확인해야합니다! 첫 번째 조건을보십시오. imgpt1 태그는 "frontbumpers"이므로 조건은 항상 true입니다! 그러므로 매번 같은 메시지를 보여줍니다.

@Override 
    public void onClick(View v) { 
     String message=""; 

//for your clarification here v is the view which was clicked ex. impt1 or 2 3 4.... or anything which has an onClick listener assigned and was click will call this method. 

     if(v.getTag()=="frontbumpers") 
     { 
      message="This is Bumper"; 
     } 
     else if(v.getTag()=="frontfenders") 
     { 
      message="This is Fenders"; 
     } 
     else if(v.getTag()=="frontheadlight") 
     { 
      message="This is headlight"; 
     } 
     else if(v.getTag()=="frontgrilles") 
     { 
      message="This is grilles"; 
     } 
} 

**

String에 대한 equals()보다는 ==를 사용하는 것이 좋습니다. v.getTag() '로 변경합니다. 아무리 당신이 클릭하는 이미지가 표시되지 것입니다 이유는, ("someValueYouWantToCheck")의 onclick 방법에

1

, 당신은 모든 경우 다른 조건에 대한 첫 번째 이미지를 사용 동일 첫 번째 이미지 메시지.

String message=""; 
    if(**imgpt1.getTag()**=="frontbumpers") 
    { 
     message="This is Bumper"; 
    } 
    else if(**imgpt1.getTag()**=="frontfenders") 
    { 
     message="This is Fenders"; 
    } 
    else if(**imgpt1.getTag()**=="frontheadlight") 
    { 
     message="This is headlight"; 
    } 
    else if(**imgpt1.getTag()**=="frontgrilles") 
    { 
     message="This is grilles"; 
    } 
+0

감사합니다. 바로 지금 나는 그것을 보았다. 나는 그것을 지금 바꿨다. – user3661367

0

사용 imgpt1.getTag().equals("string") 대신 imgpt1.getTag()=="string"

이 시도 :

@Override 
public void onClick(View v) { 
    String message=""; 
    if(imgpt1.getTag().equals("frontbumpers")) 
    { 
     message="This is Bumper"; 
    } 
    else if(imgpt1.getTag().equals("frontfenders")) 
    { 
     message="This is Fenders"; 
    } 
    else if(imgpt1.getTag().equals("frontheadlight")) 
    { 
     message="This is headlight"; 
    } 
    else if(imgpt1.getTag().equals("frontgrilles")) 
    { 
     message="This is grilles"; 
    } 

    AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this); 
    builder.setTitle("Car Parts"); 
    builder.setMessage(message); 
    builder.setNeutralButton("OK", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      dialog.cancel(); 
     } 
    }).create().show(); 

} 
+3

이것은 그의 문제를 해결하지 못합니다 :) 단지 equals를 사용하는 것이 좋습니다! 오도 ​​된 대답 –