2017-09-17 2 views
0

J'essaie de mettre à jour mon TextView à partir d'une autre classe, mais il continue à se bloquer.Comment mettre à jour un TextView d'une classe différente?

À l'origine, l'inscription «L'application est verrouillée» amène l'utilisateur à la disposition suivante où il saisit le mot de passe.
Lorsque l'utilisateur entre le mot de passe correct, l'application amène l'utilisateur à la précédente avec le texte modifié en disant "l'application est maintenant débloquée!"

MainActivity:

public class MainActivity extends AppCompatActivity { 


private Button login; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    login = (Button)findViewById(R.id.btn); 

    login.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      confirm(login.toString()); 

     } 
    }); 
} 
private void confirm(String s){ 
     Intent intent = new Intent(MainActivity.this, SecondActivity.class); 
     startActivity(intent); 
    } 
} 

Deuxième activité:

public class SecondActivity extends AppCompatActivity implements 
View.OnClickListener { 
public boolean first = false; 
public boolean second = false; 
public boolean third = false; 
public boolean fourth = false; 
public boolean submit = false; 
public TextView textView; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_second); 

    Button first = (Button) findViewById(R.id.btn1); 
    first.setOnClickListener(this); 
    Button second = (Button) findViewById(R.id.btn2); 
    second.setOnClickListener(this); 
    Button third = (Button) findViewById(R.id.btn3); 
    third.setOnClickListener(this); 
    Button fourth = (Button) findViewById(R.id.btn4); 
    fourth.setOnClickListener(this); 
    Button submit = (Button) findViewById(R.id.submit); 
    submit.setOnClickListener(this); 
    textView = (TextView)findViewById(R.id.text); 




} 
    public int counter; 

    public void onClick(View v) { 

     counter++; 
     switch (v.getId()) { 

      case R.id.btn1: 
       if (counter == 1) { 
        first = true; 
       } 
       break; 
      case R.id.btn2: 
       if (counter == 2) { 
        second = true; 
       } 
       break; 
      case R.id.btn3: 
       if (counter == 3) { 
        third = true; 
       } 
       break; 
      case R.id.btn4: 
       if (counter == 4) { 
        fourth = true; 
       } 
       break; 
      case R.id.submit: 
       submit = true; 
       open(); 
       break; 
     } 

    } 



    public void open() { 
     if (first && second && third && fourth && submit) { 
      textView.setText("Your App is now Unlocked!"); 
      Intent intent = new Intent(SecondActivity.this, 
MainActivity.class); 
      startActivity(intent); 
      finish(); 



     } else { 
      Intent intent = new Intent(SecondActivity.this, 
MainActivity.class); 
      startActivity(intent); 
      finish(); 

     } 


    } 


} 

mise en page de MainActivity:

<Button 
    android:id="@+id/btn" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="8dp" 
    android:layout_marginLeft="8dp" 
    android:layout_marginRight="8dp" 
    android:layout_marginTop="8dp" 
    android:text="unlock" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" /> 

<TextView 
    android:id="@+id/text" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="8dp" 
    android:layout_marginLeft="8dp" 
    android:layout_marginRight="8dp" 
    android:layout_marginTop="8dp" 
    android:text="Welcome to the app! The app is LOCKED!" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintVertical_bias="0.238" /> 

</android.support.constraint.ConstraintLayout> 
+0

Vous appelez 'finish()' après avoir réglé le texte dans l'activité en cours ... Vous ne serez pas en mesure de voir que texte très long .... Si votre application * s'est écrasée *, vous devez ajouter le logcat à votre demande –

Répondre

0
  1. Assurez-vous que toutes les activités sont dans le manifeste.

  2. Assurez-vous que tous les éléments XML sont dans les dispositions correctes. Par exemple, android:id="@+id/text" ne fait pas partie de activity_second.xml, il est donc nul.


En général, vous passez de manière incorrecte des objets autour d'intention. Vous avez un cycle.

MainActivity commence la deuxième

private void confirm(String s){ 
    Intent intent = new Intent(MainActivity.this, SecondActivity.class); 
    startActivity(intent); 
} 

deuxième commence alors principal

Intent intent = new Intent(SecondActivity.this, 
MainActivity.class); 
startActivity(intent); 

Et vous pouvez continuer à ajouter des cas d'activité à la pile de cette façon.

Ce que vous devez faire est de voir How to manage `startActivityForResult` on Android?

Et Getting a Result from an Activity.


Pour commencer, vous pouvez essayer cette

public static final int CONFIRM_RESULT = 1; 

private void confirm(String s){ 
    Intent intent = new Intent(MainActivity.this, SecondActivity.class); 
    intent.putExtra("passphrase", s); 
    startActivityForResult(intent, CONFIRM_RESULT); 
}