2017-04-18 4 views
1

Ich bin Anfänger auf Android. Ich möchte eine Bildbeschreibung anzeigen (mithilfe von AlertDialog), wenn ein Benutzer auf das Bild klickt. Aber das AlertDialog-Feld zeigt immer die erste gespeicherte Nachricht an, wenn ich auch auf das andere Bild klicke? Es wird nicht zurückgesetzt, wenn ich auf andere Bilder klicke. Wer hilft mir bitte?Wie ändere ich eine Nachricht in AlertDialog, immer wenn ich auf ein anderes Bild in andriod klicke?

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

bitte diese Antworten mit "gleichem" Vorschlag. Jeder hat eine irreführende Antwort. Sie haben ein Problem mit der Ansicht, die Sie überprüfen.Ich habe eine Antwort gepostet. –

Antwort

3

Zum einen werden Sie imgpt1 in jedem Fall verwendet, die nicht das Szenario sein sollte. Vielmehr

v.getTag.equals("xxx") 

verwenden Nach der Lösung, dass versuchen, die beste Android-Praxis für den Vergleich von Zeichenketten zu verwenden.

Best Practice, während die Fäden in Android (Java) zunächst die null und leere Zeichenkette

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

Dann schauen Sie für die gleichen Fälle mit Überprüfung überprüfen vermeiden, dass die unten genannten Code unter Verwendung

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

Dank Bro. Es hat jetzt funktioniert. – user3661367

3

die Sie interessieren ..

Wenn Sie Strings .equals überprüfen() verwenden, bei int Verwendung ==

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

das löst sein Problem nicht :) es ist nur ein Vorschlag, gleich zu verwenden! irreführende Antwort –

2

In onClick verwenden

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

statt

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

das löst sein Problem nicht :) es ist nur ein Vorschlag, 'equals' zu verwenden! irreführende Antwort –

+0

Ich habe es versucht. Aber es ändert sich nicht. – user3661367

1

sollten Sie überprüfen die Tag des view nicht das statische Element, da sie immer wahr sein! schau auf deinen ersten Zustand. imgpt1 Tag ist "frontbumpers" also dieser Zustand ist immer wahr! Daher zeigt es jedes Mal die gleiche Nachricht.

@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"; 
     } 
} 

** empfohlen equals() zu verwenden, anstatt == für String. ändern zu `v.getTag(). equals („someValueYouWantToCheck“)

1

In onClick Methode Sie für all erstes Bild, wenn sonst Bedingungen verwendet, deshalb, egal, welches Bild Sie klicken, wird es zeigen erste Bildnachricht.

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

Dank Bro. Gerade jetzt habe ich es gesehen. Ich habe es jetzt geändert. – user3661367

0

Verwenden imgpt1.getTag().equals("string") statt imgpt1.getTag()=="string"

Try this:

@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

das löst sein Problem nicht :) es ist nur ein Vorschlag, gleich zu verwenden! irreführende Antwort –

Verwandte Themen