したがって、基本Application
クラスを拡張し、メンバー変数を追加して、以下のリンクのこの最初のソリューションのようにグローバル変数を作成しようとしています。
これは、メンバー変数がaString
や。のような単純なデータ型である場合に機能しBoolean
ます。しかし、より複雑なデータ型に対してどのようにそれを行いますか?私の場合、メンバー変数をタイプにしたいと思います HashMap<String, Boolean>
。
3つのメンバー変数onActivityResult()
(ブール値、a String
、および)を設定しており、ボタンのメソッドでHashMap<String, Boolean>
これらのメンバー変数にアクセスしようとしています。文字列変数とブール変数にアクセスすると、それらの値が適切に設定されます。ただし、変数にアクセスすると、その値は「{}」、つまり空に設定されます。複雑なデータ型で発生する必要がある種類はありますか?onClick()
onClickListener
HashMap<String, Boolean>
HashMap
Serialization
また、メンバー変数としてを追加しました。メソッドでArrayList<Boolean>
この変数にアクセスすると、onclick()
正しく設定されました。おそらく、HashMapsは別の方法で設定する必要があります。この点はよくわかりません。
HashMap
以下のコードでは、メンバー変数のみを含む簡略化されたバージョンを示しています。
これが私のサブクラスですApplication
public class MyApp extends Application {
private HashMap<String, Boolean> selectedContacts = null;
public HashMap<String, Boolean> getSelectedContacts() {
return this.selectedContacts;
}
public void setSelectedContacts(HashMap<String, Boolean> sc) {
this.selectedContacts = sc;
}
}
以下はメソッドonActivityResult()
とonClick()
私のメッセンジャーActivity
です。でonActivityResult()
、MyAppクラスのプライベートメンバー変数を設定します。このonClick()
メソッドでは、アクセサーメソッドを呼び出します。
public void onActivityResult(int reqCode, int resultCode, Intent data) {
super.onActivityResult(reqCode, resultCode, data);
switch (reqCode) {
case R.integer.contact_manager:
if (resultCode == RESULT_CANCELED)
Log.d(getString(R.string.debug_tag), "FAILURE");
if (resultCode == RESULT_OK) {
Log.d(getString(R.string.debug_tag), "SUCCESS");
MyApp appState = ((MyApp)getApplication());
appState.setSelectedContacts((HashMap<String, Boolean>) data.getSerializableExtra("selectedContacts"));
}
break;
}
}
add_contact_button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(Messenger.this, ContactManager.class);
MyApp appState = ((MyApp)getApplication());
HashMap<String, Boolean> sc = appState.getSelectedContacts();
if (sc != null) {
int totalContacts = sc.size();
if(totalContacts > 0) {
Bundle bundle = new Bundle();
bundle.putSerializable("selectedContacts",sc);
i.putExtras(bundle);
}
}
startActivityForResult(i, R.integer.contact_manager);
}
});