MainActivity
にはArrayList<String>
があります。私はEditItemActivity
にリストの項目の1つを送りたいと思います。私はintent.putExtra()
を使ってStringオブジェクトを送信しています。私は整数オブジェクトとしてもインデックスを送信しようとしていました。しかし、私はおそらくArrayList<String>
のための私のインデックスとして "要求コード"変数を使用できることに気付きました。インテントのstartActivityForResult()で使用されるリクエストコードを通常の変数として使用できますか?
Android developer's documentに示されたコード例は、static final int REQUEST_CODE
を使用しています。さて、静的な最終変数を通常の変数に変更するのが良い方法かどうかはわかりません。重要なことを実現していない場合は、経験豊富なデベロッパーから洞察を得たいと思います。
私のコードでは、request_code = pos
と設定しました。それはハックのように感じる。これは従来のリクエストコードの使い方ですか?リクエストコードのstatic final int
を使用して
// 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で使っていません。 MainActivityは更新を読むことができますが、ArrayList内のどの項目が更新されたのかわからないので、インデックスを追跡する必要があります。インデントまたは2)要求インデックスとしてセーブインデックスを使用し、データが返ってきたときにインデックスを取得する –