我在MainActivity
中有一個ArrayList<String>
。我想發送一個列表中的項目到EditItemActivity
。我正在使用intent.putExtra()
發送String對象。我也將發送索引作爲整數對象。但我意識到我可以使用「請求代碼」變量作爲ArrayList<String>
的索引。在Android developer's document所示可以使用intent的startActivityForResult()中使用的請求代碼作爲常規變量嗎?
代碼示例使用static final int REQUEST_CODE
。現在,我不確定如果改變(通常是什麼)靜態最終變量是一個好習慣。我想從更有經驗的開發人員那裏獲得一些見解,以防我沒有意識到重要的事情。
這裏我設request_code = pos
。這感覺就像一個黑客。這是使用請求代碼的傳統方式嗎?
// MainActivity.java
private int request_code;
ArrayList<String> items;
ListView listView;
...
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View item, int pos, long id) {
Intent i = new Intent(MainActivity.this, EditItemActivity.class);
i.putExtra("text", items.get(pos));
request_code = pos;
startActivityForResult(i, request_code);
}
});
...
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == RESULT_OK && requestCode == request_code){
String newText = data.getExtras().getString("newText");
items.set(request_code, newText);
itemsAdapter.notifyDataSetChanged();
}
}
// EditItemActivity.java
public void onSaveItem(View v) {
String newText = editText.getText().toString();
Intent i = new Intent();
i.putExtra("newText", newText);
setResult(RESULT_OK, i);
finish();
}
「但是,您通過這種方法真正獲得了什麼?」我不必在意圖的putExtra中發送額外(冗餘)信息。我使用ArrayList的索引作爲請求代碼,因爲它也恰好是唯一的「 –
@Leo Kim - 唔...不,我認爲我沒有明白你的觀點,對不起,據我所知,你不要訪問另一個活動中的請求代碼位置(我甚至不知道你能做到這一點) – 0X0nosugar
你有點懂了:)你說得對,我沒有在我的EditItemActivity中使用它。更新String對象,我把它發送回MainActivity,MainActivity可以讀取更新,但不知道ArrayList中的哪個項目被更新了,所以我需要跟蹤索引,我可以1)發送index in這個縮進或2)使用保存索引作爲請求代碼,並在數據返回時檢索索引 –