2016-04-21 2 views
0

Dies ist meine erste Frage, die hier gepostet wird, also hoffe ich, dass ich das Problem, das ich gründlich und klar habe, erklärt habe. Jede/jede Hilfe würde sehr geschätzt werden.Intent Extra entspricht nicht seinem Wert in if-Anweisung

Hier sind die Java-Dateien arbeite ich an:

MainActivity.java

public class MainActivity extends AppCompatActivity { 

    ImageButton name1Button; 
    ImageButton name2Button; 
    ImageButton name3Button; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); // Layout contains 3 ImageButtons "@+id/imageButton1", "@+id/imageButton2" and "@+id/imageButton3" 

     name1Button = (ImageButton) findViewById(R.id.imageButton1); 
     name2Button = (ImageButton) findViewById(R.id.imageButton2); 
     name3Button = (ImageButton) findViewById(R.id.imageButton3); 
    } 

    public void onChangeScreen(View view) { 
     Intent changeScreenIntent = new Intent(this, SecondActivity.class); 

     if(view == name1Button) { 
      changeScreenIntent.putExtra("Name", "name1"); 
     } else if (view == name2Button) { 
      changeScreenIntent.putExtra("Name", "name2"); 
     } else if (view == name3Button) { 
      changeScreenIntent.putExtra("Name", "name3"); 
     } else { 
      changeScreenIntent.putExtra("Name", "Other"); 
      } 
     startActivity(changeScreenIntent); 
    } 
} 

SecondActivity.java

public class SecondActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.my_layout); //Contains a TextView "@+id/textViewName" 

     Intent myIntent = getIntent(); 
     String strName = myIntent.getExtras().getString("Name"); //Set strName to the parsed name ("name1", "name2" or "name3") 
     TextView myTextView = (TextView) findViewById(R.id.textViewName); 
     myTextView.setText(strName); //Sets the name parsed to a TextView //Setting the texts of the displayed TextView "@+id/textViewName" to the value of strName. This CORRECTLY shows the parsed name. 

     if(strName == "name1") { // Never true, even though the value of strName is "name1" 
      //Do thing if certain button clicked 
      Toast.makeText(this, "You selected name1", Toast.LENGTH_SHORT).show(); 
     } else { 
      //Do other thing if non-specified button clicked 
      Toast.makeText(this, "Something went wrong", Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 

Was damit gemeint ist, ist zu tun, wie folgt:

  • MainActivity zeigt 3, aber Tonnen.
  • Der Benutzer drückt 1 der 3 Tasten, die alle onChangeScreen aufrufen.
  • Abhängig davon, welche der 3 Schaltflächen zum Aufruf von onChangeScreen verwendet wurde, wird ein anderer Wert (String) an SecondActivity übergeben.
  • Nach dem Einstellen der Zeichenfolge SecondActivity übergeben werden (unter Verwendung einer if-Anweisung und changeScreenIntent.putExtra() wird die zweite Aktivität genannt.
  • SecondActivity ein einzelnes Textfeld angezeigt wird, die auf den Wert gesetzt wird Bestanden die .putExtra() verwenden.
  • eine if-Anweisung wird dann verwendet, einige Maßnahmen perfom basierend auf der String übergeben, die im wesentlichen auf dem basieren wird, um die SecondActivity genannt.

Dies ist, wo das Problem auftritt. die if-Anweisung die Zeichenfolge übergeben in SecondActivity Vergleich ist anscheinend nicht gleich dem Wert der Zeichenfolge (noch t er zeigte TextView zeigt diesen String). Und so wird der Code (ersetzt durch einen Toast) innerhalb der if-Anweisung nie benutzt.

+0

Haben Sie diese Methode 'onChangeScreen' über XML aufgerufen? –

+0

Vergleichen Sie Zeichen mit Gleichheitszeichen, vergleichen Zeichen mit "==" .. – DAVIDBALAS1

Antwort

0

vergleichen Zeichenfolge mit equals statt ==

Verwenden

if(strName .equals("name1")) 
1

immer für String-Vergleich verwenden

if(strName.equals("name1")) 
Toast.makeText(this, "You selected name1", Toast.LENGTH_SHORT).show(); 
     } else { 
      //Do other thing if non-specified button clicked 
      Toast.makeText(this, "Something went wrong", Toast.LENGTH_SHORT).show(); 
     } 

equals() anstelle von == für String .....

genießen Sie Codierung .....

+0

@ Archimedes94 Ist Ihr Problem gelöst ?? – sushildlh

1

Verwenden Sie "name1".equals(strName) anstelle von ==. Und im Fall strName ist jemals null.

+0

Ich bin auch ein Fan davon, den String konstant zu setzen, um den Null-Check zu vermeiden, auch wenn er nicht ganz so schön aussieht. –