ベースのApplication
クラスを拡張し、以下のリンクのこの最初のソリューションのようにグローバル変数を作成するメンバ変数を追加しようとしています。グローバル変数拡張アプリケーションクラス
メンバ変数がString
またはBoolean
などの単純なデータ型である場合、これは動作します。しかし、より複雑なデータ型のためにはどうしたらいいですか?私の場合、メンバー変数はHashMap<String, Boolean>
であることが望ましいです。
私は3つのメンバーonActivityResult()
の変数(ブール、String
、およびHashMap<String, Boolean>
)を設定しています、と私はボタンのonClickListener
のonClick()
方法でこれらのメンバ変数にアクセスしようとしています。文字列とブール変数にアクセスすると、その値は適切に設定されます。しかし、私がHashMap<String, Boolean>
変数にアクセスすると、その値は '{}'に設定され、空の場合はHashMap
となります。複雑なデータ型で発生する必要があるSerialization
の種類がありますか?
また、ArrayList<Boolean>
をメンバー変数として追加しました。onclick()
メソッドでこの変数にアクセスしたとき、正しく設定されました。おそらくHashMapsを別に設定する必要があります。私はこの点があまりにも確実ではない。
以下のコードでは、メンバー変数であるHashMap
のみを含む、削除されたバージョンを示しています。ここで
Activity
のメソッド
onActivityResult()
と
onClick()
がある
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()
では、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);
}
});