Показать строку в TextView после ввода пользователя в другом классе - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь передать строку из класса (UserInput) в Main Activity и отобразить ее в TextView.Пользователь должен нажать кнопку в Main Activity, которая вызывает UserInput и ввести строку.Используя Shared Preferences, мне удалось передать String, но я не смог отобразить его в TextView.

Я понял, что части getSharedPreference и setText были выполнены до запуска класса, в результате чего TextView необновляется после возвращения из UserInput, и я понятия не имею, как решить эту проблему.Любая помощь будет высоко ценится.Спасибо!

Основной код активности

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

TextView tvCode;
Button btnCode, btnClear;
TextInputLayout textInputMessage;
String preferenceFileName, preferenceKey, retreivedCodeString;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    tvCode = findViewById(R.id.textViewCode);
    btnCode = findViewById(R.id.buttonCode);
    btnClear = findViewById(R.id.buttonClear);
    textInputMessage = findViewById(R.id.textInputLayoutMessage);
    preferenceFileName = "PreferenceFile";
    preferenceKey = "CodeKey";


    SharedPreferences sharedPreferences = getSharedPreferences(preferenceFileName, MODE_PRIVATE);
    retreivedCodeString = sharedPreferences.getString(preferenceKey,"");
    tvCode.setText(retreivedCodeString);

    btnCode.setOnClickListener(this);
    btnClear.setOnClickListener(this);
}


@Override
public void onClick(View arg0) {
    switch (arg0.getId()){
        case R.id.buttonClear:
            //method
            break;
        case R.id.buttonCode:
            Intent intent = new Intent(this, UserInput.class);
            startActivity(intent);
            sharedPreferences = getSharedPreferences(preferenceFileName, MODE_PRIVATE);
            retreivedCodeString = sharedPreferences.getString(preferenceKey,"");
            tvCode.setText(retreivedCodeString);
            break;
    }

}

Код входа пользователя

public class UserInput extends Activity implements View.OnClickListener {
String userInputCode, preferenceFileName, preferenceKey;
TextInputLayout subTextInputLayoutCode;

@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.code);

    subTextInputLayoutCode = findViewById(R.id.textInputLayoutCode);
    Button btnOk = findViewById(R.id.buttonOk);
    Button btnCancel = findViewById(R.id.buttonCancel);
    preferenceFileName = "PreferenceFile";
    preferenceKey = "CodeKey";

    btnOk.setOnClickListener(this);
    btnCancel.setOnClickListener(this);
}

@Override
public void onClick(View arg0) {
    switch (arg0.getId()){
        case R.id.buttonOk:
            if (!validateCode()){
                return;
            }
            userInputCode = subTextInputLayoutCode.getEditText().getText().toString();
            SharedPreferences sharedPreferences = getSharedPreferences(preferenceFileName, MODE_PRIVATE);
            SharedPreferences.Editor editor = sharedPreferences.edit();
            editor.putString(preferenceKey,userInputCode);
            editor.apply();
            finish();
            break;
        case R.id.buttonCancel:
            finish();
            break;
    }
}

1 Ответ

2 голосов
/ 28 марта 2019

Путь 1:

используйте приведенный ниже код в onResume метод вашего MainActivity

SharedPreferences sharedPreferences = getSharedPreferences(preferenceFileName, MODE_PRIVATE);
retreivedCodeString = sharedPreferences.getString(preferenceKey,"");
tvCode.setText(retreivedCodeString);

Путь 2:

начните свою UserInput активность для результата (startActivitForResult(intent, 123))

и завершите свою UserInput активность, используя приведенный ниже код

setResult(Activity.RESULT_OK)
finish()

в переопределении основной активности onActivityResultMethode как показано ниже

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    if(requestCode == 123 && resultCode == Activity.RESULT_OK){
         SharedPreferences sharedPreferences = getSharedPreferences(preferenceFileName, MODE_PRIVATE);
         retreivedCodeString = sharedPreferences.getString(preferenceKey,"");
         tvCode.setText(retreivedCodeString);
    } else {
        super.onActivityResult(requestCode, resultCode, data)
    }
}

Способ 3: (без sharedPreferences)

начать свою UserInput активность для результата (startActivitForResult(intent, 123))

и завершите свою UserInput активность, используя приведенный ниже код

Intent i = new Intent();
Bundle b = new Bundle();
b.putString("inputText", YOUR_INPUT_TEXT);
i.putExtras(b);
setResult(123, i)
finish()

в своей основной деятельности onActivityResultMethode, как показано ниже

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    if(requestCode == 123 && resultCode == Activity.RESULT_OK){
         tvCode.setText(data.getExtras().getString("inputText",""));
    } else {
        super.onActivityResult(requestCode, resultCode, data)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...