由於我無法確定的原因,當我在菜單設置中更改名稱字符串時,傳遞給顯示活動的名稱字符串將不會更新。我省略了一些額外的代碼,但希望這些概念在那裏。特別是,當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