由于我无法确定的原因,当我在菜单设置中更改时,我传递给显示活动的名称字符串将不会更新。我省略了一些多余的代码,但希望概念在那里。特别是,当DisplayName启动时,我检查了调试器,并且放入intent中的额外内容不会更改其默认值(即:“John Doe”)。我注意到当我使用选项菜单活动更改名称时,每次返回选项菜单时都会反映此更改。但是,当我进入显示屏时,名称仍然保持不变。
我知道这些值很简单,它们可以保存在静态成员变量中,我通常不必处理bundle的传递,但是我仍然很好奇为什么我的代码无法正常运行
我注意到如果我使用菜单选项首先设置名称,然后单击显示按钮,则会反映更改。但是,在返回主屏幕并更改名称后,显示屏幕将继续保持相同的名称。这让我想到,因为我按“返回”从显示活动返回到主屏幕,然后活动永远不会被杀死所以它永远不会改变显示的名称。猜测是否正确?
public class MainScreen extends activity {
private String mName;
public static final String EXTRA_NAME = "android.intent.extra.NAME";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mName = "John Doe"
Button button = (Button) findViewById(R.id.display_button);
button.setOnClickListener(mDisplayButtonListener);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(0, SET_CONTACT_ID, 0, R.string.menu_setName);
return true;
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
switch(item.getItemId()) {
case SET_CONTACT_ID:
Intent intent = new Intent(MainScreen.this, ContactEdit.class);
intent.putExtra(EXTRA_NAME, mName)
startActivityForResult(intent, 1);
return true;
}
return super.onMenuItemSelected(featureId, item);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK)
{
mName = data.getExtras().getString(EXTRA_NAME);
}
}
private OnClickListener mDisplayButtonListener = new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(MainScreen.this, DisplayName.class);
intent.putExtra(EXTRA_NAME, mName);
startActivity(intent);
}
};
}
public class ContactEdit extends Activity {
private EditText mEditName;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mEditName = (EditText) findViewById(R.id.editName);
mEditName.setText(this.getIntent().getExtras().getString(MainScreen.EXTRA_NAME));
Button button = (Button) findViewById(R.id.submit_select);
button.setOnClickListener(mSubmitName);
}
private OnClickListener mSubmitName = new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
mName = mEditName.getText().toString();
intent.putExtra(MainScreen.EXTRA_NAME, mName);
setResult(RESULT_OK, intent);
finish();
}
}
}
public class DisplayName extends Activity {
private String mName;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mName = getIntent.getExtras().getString(MainScreen.EXTRA_NAME)
TextView view = (TextView) findViewById(R.id.name);
view.setText(mName);
}
}
答案 0 :(得分:1)
有时您使用“名称”作为键从意图中获取值,有时则使用“NAME”。始终使用相同的,然后再试一次。
这就是为什么你应该有一个静态const字符串字段而不是硬编码该值到处
答案 1 :(得分:0)
the name string I am passing to the display activity will not be updated when I change it in the menu setting
在ContactEdit类中:
您所做的只是将EditText
的文字设置为您从MainScreen
(即“John Doe”)收到的内容。当您点击按钮mSubmitName
时,您会发送mName
的值(在您的示例中甚至没有声明)。
要发送您在EditText
中输入的任何新值,您必须先检索它:
public class ContactEdit extends Activity {
private EditText mEditName;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mEditName = (EditText) findViewById(R.id.editName);
mEditName.setText(this.getIntent().getExtras().getString(MainScreen.EXTRA_NAME));
Button button = (Button) findViewById(R.id.submit_select);
button.setOnClickListener(mSubmitName);
}
private OnClickListener mSubmitName = new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra(MainScreen.EXTRA_NAME, mEditName.getText()); // <-- Retrieve the value from the EditText
setResult(RESULT_OK, intent);
finish();
}
}
}
答案 2 :(得分:0)
我修复了问题,我没有正确关闭活动,所以它只是恢复现有活动,而不是通过OnCreate步骤。