android - TextView 未从其他活动更新
问题描述
我在 Activity 1 中有一个 TextView ,其默认字符串值"Select a location"
在单击时会打开 Activity 2 并且用户会创建一个字符串。就在 Activity 2 完成并返回 Activity 1 之前,我希望使用新的字符串值更新 TextView(在 Activity 1 中)。我的问题是 TextView 保留其默认值,并且不会使用新值进行更新。
我也试过设置SharedPreferences
,但也没有用。我目前的做法是在 Activity 2 中扩展 Activity 1 的布局,并使用 TextView 的实例更新文本,如行中所示street_address_textview.setText(chosenLocationString);
。我已经排除了代码的不相关部分,并且chosenLocationString
具有正确的值。
活动一:
TextView streetAddress_textview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_create_event);
streetAddress_textview = (TextView) findViewById(R.id.StreetAddress_textview);
streetAddress_textview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view){
// Create a new intent to open the Set Event Location Activity
Intent intent = new Intent(CreateEventActivity.this,
SetEventLocationActivity.class);
// Start the new activity
startActivity(intent);
}
});
{
活动二:
TextView street_address_textview;
TextView set_location_button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_set_event_location);
// Inflate Create Event activity in order to access street address textview
View inflatedView = getLayoutInflater().inflate(R.layout.activity_create_event, null);
street_address_textview = (TextView) inflatedView.findViewById(R.id.StreetAddress_textview);
set_location_button = (TextView) findViewById(R.id.set_location_button);
// When Set Location button is clicked, set street address textview, close activity
set_location_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(chosenLatLng != null) {
chosenLocationString = chosenLatLng.toString();
street_address_textview.setText(chosenLocationString);
SetEventLocationActivity.this.finish();
}
}
});
}
谢谢!
解决方案
膨胀视图并不意味着它是可见的,除非您在膨胀时传递一个parent
View
对象。attachToRoot true
在上面的代码片段中,您只是View
使用LayoutInflater
. 但是在Activity1View
中显示的并不相同,而只是相同的另一个实例。您可以通过多种方式实现目标,但我认为以下方式对您来说是有意义的。首先,您必须通过调用方法而不是获取结果来启动Activity2。这是一个例子,View
startActivityForResult()
startActivity()
onActivityResult()
活动一:
private static final int YOUR_REQUEST = 123;
TextView streetAddress_textview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_create_event);
streetAddress_textview = (TextView) findViewById(R.id.StreetAddress_textview);
streetAddress_textview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view){
// Create a new intent to open the Set Event Location Activity
Intent intent = new Intent(CreateEventActivity.this,
SetEventLocationActivity.class);
// Start the new activity
startActivityForResult(intent, YOUR_REQUEST);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// Check which request we're responding to
if (requestCode == YOUR_REQUEST) {
// Make sure the request was successful
if (resultCode == RESULT_OK) {
String returnString = data.getStringExtra("result");
streetAddress_textview.setText(returnString);
}
}
}
活动二:
TextView set_location_button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_set_event_location);
set_location_button = (TextView) findViewById(R.id.set_location_button);
// When Set Location button is clicked, set street address textview, close activity
set_location_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(chosenLatLng != null) {
chosenLocationString = chosenLatLng.toString();
Intent returnIntent = new Intent();
returnIntent.putExtra("result", chosenLocationString);
setResult(Activity.RESULT_OK,returnIntent);
SetEventLocationActivity.this.finish();
}
}
});
}
我希望上述解决方案能解决您的问题。快乐编码:)
推荐阅读
- php - Kirby CSM 设置因 fastcgi、jwilder 的 nginx 反向代理和自定义 _location 块而失败 - 如何覆盖默认的 .conf?当前错误为 404
- c - 主函数如何在 C 中有 2 个声明/定义?
- javascript - javascript数组的动态条件
- python - 高 dpi 比例和固定窗口大小
- amazon-web-services - AWS ApiGateway:位置标头 URL 替换
- javascript - 如何使用原始 javascript 在我的 index.html 文件中模拟 SPA 导航?
- dataweave - 将日期从 dd-MMM-yy 转换为 yyyy-MM-dd
- db2 - 如何定义隐式列名的 H2 语法问题
- javascript - Firestore 并发事务冻结
- encryption - 在“Emit”阶段发生错误:不支持特定方法 Babel Obfuscator