用户在另一个 class 中输入后在 TextView 中显示字符串
Display String in TextView after user input in another class
我正在尝试将字符串从 class (UserInput) 传递到 Main Activity 并将其显示在 TextView 中。用户应该按下 Main Activity 中的一个按钮,它调用 UserInput 并输入一个字符串。使用共享首选项,我设法传递了字符串,但无法在 TextView 中显示它。
我意识到getSharedPreference 和setText 部分是在class 开始之前完成的,导致从UserInput 返回后TextView 没有更新,我不知道如何解决这个问题。任何帮助都感激不尽。谢谢!
主要Activity代码
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;
}
}
方式一:
在 MainActivity
的 onResume
方法中使用以下代码
SharedPreferences sharedPreferences = getSharedPreferences(preferenceFileName, MODE_PRIVATE);
retreivedCodeString = sharedPreferences.getString(preferenceKey,"");
tvCode.setText(retreivedCodeString);
方式二:
开始你的 UserInput
activity 结果 (startActivitForResult(intent, 123)
)
并使用下面的代码
完成你的UserInput
activity
setResult(Activity.RESULT_OK)
finish()
在您的主要 activity 覆盖 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
activity 结果 (startActivitForResult(intent, 123)
)
并使用下面的代码
完成你的UserInput
activity
Intent i = new Intent();
Bundle b = new Bundle();
b.putString("inputText", YOUR_INPUT_TEXT);
i.putExtras(b);
setResult(123, i)
finish()
在您的主要 activity 覆盖 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)
}
}
我正在尝试将字符串从 class (UserInput) 传递到 Main Activity 并将其显示在 TextView 中。用户应该按下 Main Activity 中的一个按钮,它调用 UserInput 并输入一个字符串。使用共享首选项,我设法传递了字符串,但无法在 TextView 中显示它。
我意识到getSharedPreference 和setText 部分是在class 开始之前完成的,导致从UserInput 返回后TextView 没有更新,我不知道如何解决这个问题。任何帮助都感激不尽。谢谢!
主要Activity代码
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;
}
}
方式一:
在 MainActivity
onResume
方法中使用以下代码
SharedPreferences sharedPreferences = getSharedPreferences(preferenceFileName, MODE_PRIVATE);
retreivedCodeString = sharedPreferences.getString(preferenceKey,"");
tvCode.setText(retreivedCodeString);
方式二:
开始你的 UserInput
activity 结果 (startActivitForResult(intent, 123)
)
并使用下面的代码
完成你的UserInput
activity
setResult(Activity.RESULT_OK)
finish()
在您的主要 activity 覆盖 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
activity 结果 (startActivitForResult(intent, 123)
)
并使用下面的代码
完成你的UserInput
activity
Intent i = new Intent();
Bundle b = new Bundle();
b.putString("inputText", YOUR_INPUT_TEXT);
i.putExtras(b);
setResult(123, i)
finish()
在您的主要 activity 覆盖 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)
}
}