android.os.Message
একটি ব্যবহার Bundle
এটা sendMessage-পদ্ধতি সঙ্গে পাঠান। সুতরাং, এটি কি একটি HashMap
ভিতরে রাখা সম্ভব Bundle
?
android.os.Message
একটি ব্যবহার Bundle
এটা sendMessage-পদ্ধতি সঙ্গে পাঠান। সুতরাং, এটি কি একটি HashMap
ভিতরে রাখা সম্ভব Bundle
?
উত্তর:
হিসাবে চেষ্টা করুন:
Bundle extras = new Bundle();
extras.putSerializable("HashMap",hashMap);
intent.putExtras(extras);
এবং দ্বিতীয় ক্রিয়াকলাপে
Bundle bundle = this.getIntent().getExtras();
if(bundle != null) {
hashMap = bundle.getSerializable("HashMap");
}
কারণ ডিফল্টরূপে হাশম্যাপ প্রয়োগ করে Serializable
যাতে আপনি এটি বান্ডলে ব্যবহার করে পাস করতে পারেন putSerializable
এবং ব্যবহার করে অন্যান্য ক্রিয়াকলাপে যেতে পারেনgetSerializable
দয়া করে নোট করুন: আপনি যদি অ্যাপকম্প্যাটঅ্যাক্টিভিটি ব্যবহার করে থাকেন তবে আপনাকে protected void onSaveInstanceState(Bundle outState) {}
( না public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {}
) পদ্ধতিতে কল করতে হবে
।
উদাহরণ কোড ...
মানচিত্র সংরক্ষণ করুন:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("leftMaxima", leftMaxima);
outState.putSerializable("rightMaxima", rightMaxima);
}
এবং এটি অনক্রিটে গ্রহণ করুন:
if (savedInstanceState != null) {
leftMaxima = (HashMap<Long, Float>) savedInstanceState.getSerializable("leftMaxima");
rightMaxima = (HashMap<Long, Float>) savedInstanceState.getSerializable("rightMaxima");
}
দুঃখিত যদি এটি কোনও ধরণের সদৃশ উত্তর হয় - তবে কেউ এটির কাজে লাগবে। :)
আপনি যদি বান্ডলে সমস্ত কীগুলি প্রেরণ করতে চান তবে আপনি চেষ্টা করতে পারেন
for(String key: map.keySet()){
bundle.putStringExtra(key, map.get(key));
}
public static Bundle mapToBundle(Map<String, Object> data) throws Exception {
Bundle bundle = new Bundle();
for (Map.Entry<String, Object> entry : data.entrySet()) {
if (entry.getValue() instanceof String)
bundle.putString(entry.getKey(), (String) entry.getValue());
else if (entry.getValue() instanceof Double) {
bundle.putDouble(entry.getKey(), ((Double) entry.getValue()));
} else if (entry.getValue() instanceof Integer) {
bundle.putInt(entry.getKey(), (Integer) entry.getValue());
} else if (entry.getValue() instanceof Float) {
bundle.putFloat(entry.getKey(), ((Float) entry.getValue()));
}
}
return bundle;
}
আমি তা অর্জনের জন্য পার্সেবলের আমার কোটলিন বাস্তবায়নটি ব্যবহার করছি এবং এখনও পর্যন্ত এটি আমার পক্ষে কাজ করে। ভারী সিরিয়ালাইজযোগ্য এড়াতে চাইলে এটি কার্যকর।
এটি কাজ করার জন্য, আমি এগুলি দিয়ে এটি ব্যবহার করার পরামর্শ দিচ্ছি
ঘোষণা
class ParcelableMap<K,V>(val map: MutableMap<K,V>) : Parcelable {
constructor(parcel: Parcel) : this(parcel.readMap(LinkedHashMap<K,V>()))
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeMap(map)
}
override fun describeContents(): Int {
return 0
}
companion object CREATOR : Parcelable.Creator<ParcelableMap<Any?,Any?>> {
@JvmStatic
override fun createFromParcel(parcel: Parcel): ParcelableMap<Any?,Any?> {
return ParcelableMap(parcel)
}
@JvmStatic
override fun newArray(size: Int): Array<ParcelableMap<Any?,Any?>?> {
return arrayOfNulls(size)
}
}
}
ব্যবহার
লিখুন
val map = LinkedHashMap<Int, String>()
val wrap = ParcelableMap<Int,String>(map)
Bundle().putParcelable("your_key", wrap)
পড়া
val bundle = fragment.arguments ?: Bundle()
val wrap = bundle.getParcelable<ParcelableMap<Int,String>>("your_key")
val map = wrap.map
ভুলে যাবেন না যে যদি আপনার মানচিত্রটি K,V
ডিফল্টরূপে পার্সেল না করা হয় তবে তাদের অবশ্যই প্রয়োগ করা উচিতParcelable