2017-04-18 12 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 

を使用して、ヌルや空の文字列をチェックするアンドロイド(Java)の中の文字列を確認しながら

ベストプラクティス

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

ありがとう。それは今働いた.. – user3661367

3

はこれを試してみてください。..

をあなたは文字列は.equals()を使用チェックする必要がある場合は、int型の場合には==

を使用します
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

オンクリックで

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

代わりの

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

これは彼の問題を解決しません:)それはちょうど 'equals'を使うための示唆です!間違った答え –

+0

私はそれを試した。しかしそれは変わらない。 – user3661367

1

彼らは常にtrueになりますようあなたは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」)

1

のonClick方法で、あなたは関係なく、あなたがクリックした画像、それは表示されませんよ、なぜ、つまり、他の条件ならば、すべてのための最初のイメージを使用しました最初の画像メッセージ。

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"

はこれを試してみてください:

​​
+3

これは彼の問題を解決しません:)それはequalsを使用するための単なる提案です!誤解を招くような回答 –

関連する問題