由于我无法确定的原因,当我在菜单设置中更改名称字符串时,传递给显示活动的名称字符串将不会更新。我省略了一些额外的代码,但希望这些概念在那里。特别是,当DisplayName启动时,我使用调试器进行了检查,并且放入intent的extras不会从其默认值(即:“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);
}
}
这是一个高度截断的代码,我从削减我的大型项目,所以自然有一些错误。我在MainScreen活动中确实有一个静态常量,所以这不太可能是问题所在。我想知道是否对于如何使用捆绑包或者在启动新活动时未分配新捆绑包有语义误解。 – damonkashu 2010-12-14 19:11:30