TextView 未从其他 activity 更新
TextView not being updated from other activity
我在 Activity 1 中有一个带有默认字符串值 "Select a location"
的 TextView,单击时会打开 Activity 2 并且用户会创建一个字符串。就在 Activity 2 完成并且 returns 到 Activity 1 之前,我希望使用新的字符串值更新 TextView(在 Activity 1 中)。我的问题是 TextView 保留了它的默认值并且没有更新为新值。
我也试过设置 SharedPreferences
,但也没用。我目前的做法是在 Activity 2 中扩充 Activity 1 的布局,并使用 TextView 的实例更新文本,如第 street_address_textview.setText(chosenLocationString);
行所示。我已经排除了代码中不相关的部分,chosenLocationString
具有正确的值。
Activity 1:
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);
}
});
{
Activity 2:
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
。在上面的代码片段中,您只是使用 LayoutInflater
实例化了一个新的 View
对象。但它与 Activity1 中显示的 View
不同,而只是同一 View
的另一个实例。有几种方法可以实现您的目标,但我认为以下方法对您的情况有意义。首先,您必须通过调用 startActivityForResult()
方法而不是 startActivity()
来启动 Activity2 并在 onActivityResult()
中获取结果。这是一个例子,
Activity 1:
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);
}
}
}
Activity 2:
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();
}
}
});
}
希望以上方案能解决您的问题。编码愉快:)
我在 Activity 1 中有一个带有默认字符串值 "Select a location"
的 TextView,单击时会打开 Activity 2 并且用户会创建一个字符串。就在 Activity 2 完成并且 returns 到 Activity 1 之前,我希望使用新的字符串值更新 TextView(在 Activity 1 中)。我的问题是 TextView 保留了它的默认值并且没有更新为新值。
我也试过设置 SharedPreferences
,但也没用。我目前的做法是在 Activity 2 中扩充 Activity 1 的布局,并使用 TextView 的实例更新文本,如第 street_address_textview.setText(chosenLocationString);
行所示。我已经排除了代码中不相关的部分,chosenLocationString
具有正确的值。
Activity 1:
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);
}
});
{
Activity 2:
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
。在上面的代码片段中,您只是使用 LayoutInflater
实例化了一个新的 View
对象。但它与 Activity1 中显示的 View
不同,而只是同一 View
的另一个实例。有几种方法可以实现您的目标,但我认为以下方法对您的情况有意义。首先,您必须通过调用 startActivityForResult()
方法而不是 startActivity()
来启动 Activity2 并在 onActivityResult()
中获取结果。这是一个例子,
Activity 1:
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);
}
}
}
Activity 2:
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();
}
}
});
}
希望以上方案能解决您的问题。编码愉快:)