@@@@@@@@@@@@@@@@@@@@@@@@@@@@
সম্পাদনা: অন্যান্য সমস্যা যেহেতু ছিল তাই আমি এই সমাধানটি বাস্তবায়ন না করেই শেষ করেছি। স্কোয়ারটি সম্প্রতি 2 টি গ্রন্থাগার নিয়ে বেরিয়েছে যা খণ্ডগুলিকে প্রতিস্থাপন করে। আমি বলব যে গুগল এগুলি করতে চায় না এমন কিছু করার জন্য টুকরো টুকরো করার চেষ্টা করার চেয়ে এটি আসলে আরও ভাল বিকল্প হতে পারে।
http://corner.squareup.com/2014/01/mortar-and-flow.html
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
আমি অনুভব করেছি যে ভবিষ্যতে এই সমস্যা আছে এমন লোকদের সহায়তা করার জন্য আমি এই সমাধানটি রেখেছি। আপনি যদি অন্য লোকের সাথে মূল পোস্টারগুলির কথোপকথনের সন্ধান করেন এবং তাঁর পোস্ট করা কোডটি দেখুন তবে আপনি দেখতে পাবেন যে মূল পোস্টারটি অবশেষে পিতামাতার অংশকে অ্যানিমেটেড করার সময় শিশু খণ্ডগুলিতে কোনও অপ-অ্যানিমেশন ব্যবহারের সিদ্ধান্তে পৌঁছেছে। এই সমাধানটি আদর্শ নয় কারণ এটি আপনাকে সমস্ত শিশুর টুকরো ট্র্যাক রাখতে বাধ্য করে, যা ফ্রেগমেন্টপেজারএডাপ্টারের সাথে ভিউপেজ ব্যবহার করার সময় জটিল হতে পারে।
যেহেতু আমি সমস্ত জায়গাতেই শিশু খণ্ডগুলি ব্যবহার করি আমি এই সমাধানটি কার্যকরভাবে নিয়ে এসেছি যা কার্যকর এবং মডুলার (যাতে এটি সহজেই মুছে ফেলা যায়) যদি তারা কখনও এটিকে ঠিক করে দেয় এবং এই নো-অপশন অ্যানিমেশনটির আর প্রয়োজন নেই।
আপনি এটি প্রয়োগ করতে পারেন এমন অনেকগুলি উপায় রয়েছে। আমি একটি সিঙ্গলটন ব্যবহার করা বেছে নিয়েছি এবং আমি এটিকে চাইল্ডফ্রেগমেন্টএনিমেশনম্যানেজার বলি। এটি মূলত তার পিতামাতার উপর ভিত্তি করে আমার জন্য একটি শিশু খণ্ডের উপর নজর রাখবে এবং জিজ্ঞাসা করা হলে বাচ্চাদের জন্য কোনও অপ-অ্যানিমেশন প্রয়োগ করবে।
public class ChildFragmentAnimationManager {
private static ChildFragmentAnimationManager instance = null;
private Map<Fragment, List<Fragment>> fragmentMap;
private ChildFragmentAnimationManager() {
fragmentMap = new HashMap<Fragment, List<Fragment>>();
}
public static ChildFragmentAnimationManager instance() {
if (instance == null) {
instance = new ChildFragmentAnimationManager();
}
return instance;
}
public FragmentTransaction animate(FragmentTransaction ft, Fragment parent) {
List<Fragment> children = getChildren(parent);
ft.setCustomAnimations(R.anim.no_anim, R.anim.no_anim, R.anim.no_anim, R.anim.no_anim);
for (Fragment child : children) {
ft.remove(child);
}
return ft;
}
public void putChild(Fragment parent, Fragment child) {
List<Fragment> children = getChildren(parent);
children.add(child);
}
public void removeChild(Fragment parent, Fragment child) {
List<Fragment> children = getChildren(parent);
children.remove(child);
}
private List<Fragment> getChildren(Fragment parent) {
List<Fragment> children;
if ( fragmentMap.containsKey(parent) ) {
children = fragmentMap.get(parent);
} else {
children = new ArrayList<Fragment>(3);
fragmentMap.put(parent, children);
}
return children;
}
}
এরপরে আপনার এমন একটি শ্রেণি থাকতে হবে যা আপনার সমস্ত খণ্ডগুলি প্রসারিত করে (কমপক্ষে আপনার শিশু খণ্ড) Fra আমার এই ক্লাসটি ইতিমধ্যে ছিল এবং আমি এটিকে বেসফ্রেগমেন্ট বলি। যখন খণ্ড খণ্ড তৈরি করা হয়, আমরা এটিকে চাইল্ডফ্রেগমেন্টএনিমেশন ম্যানেজারে যুক্ত করি এবং এটি নষ্ট হয়ে গেলে এটি সরিয়ে ফেলি। আপনি এটি অনাচ / ডিটাচ, বা অনুক্রমের সাথে অন্যান্য মিলের পদ্ধতিগুলি করতে পারেন। ভিউ তৈরি করুন / ধ্বংস করুন বাছাই করার জন্য আমার যুক্তিটি হ'ল কারণ যদি কোনও খণ্ডের কোনও ভিউ না থাকে তবে আমি এটি চালিয়ে যাওয়া অ্যানিমেট করার বিষয়ে চিন্তা করি না। এই দ্রষ্টব্যটি ভিউপ্যাজারগুলির সাথে আরও ভালভাবে কাজ করা উচিত যা খণ্ডগুলি ব্যবহার করে কারণ আপনি প্রতিটি ফ্রেমমেন্টের উপর নজর রাখবেন না যে একটি ফ্রেগমেন্টপাগারএডাপ্টার রাখে, তবে কেবল 3।
public abstract class BaseFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Fragment parent = getParentFragment();
if (parent != null) {
ChildFragmentAnimationManager.instance().putChild(parent, this);
}
return super.onCreateView(inflater, container, savedInstanceState);
}
@Override
public void onDestroyView() {
Fragment parent = getParentFragment();
if (parent != null) {
ChildFragmentAnimationManager.instance().removeChild(parent, this);
}
super.onDestroyView();
}
}
এখন যেহেতু আপনার সমস্ত টুকরোগুলি পিতামণ্ডিত খণ্ডের দ্বারা মেমরিতে সংরক্ষণ করা হয়েছে, আপনি সেগুলিতে এটিকে এনিমেট করতে পারেন এবং আপনার সন্তানের খণ্ডগুলি অদৃশ্য হয়ে যাবে না।
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
ChildFragmentAnimationManager.instance().animate(ft, ReaderFragment.this)
.setCustomAnimations(R.anim.up_in, R.anim.up_out, R.anim.down_in, R.anim.down_out)
.replace(R.id.container, f)
.addToBackStack(null)
.commit();
এছাড়াও, ঠিক আপনার কাছে এটি রয়েছে, এখানে কোনও_আনিম.এক্সএমএল ফাইল রয়েছে যা আপনার রেজ / আনিম ফোল্ডারে যায়:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/linear_interpolator">
<translate android:fromXDelta="0" android:toXDelta="0"
android:duration="1000" />
</set>
আবার, আমি মনে করি না যে এই সমাধানটি নিখুঁত, তবে প্রতিটি শিশুর খোঁজ রাখার জন্য পিতামণ্ডিত খণ্ডে কাস্টম কোড প্রয়োগ করে আপনার চাইল্ড টুকরা রয়েছে এমন প্রতিটি উদাহরণের চেয়ে এটি অনেক ভাল। আমি সেখানে ছিলাম, এবং এটি কোনও মজাদার নয়।
R.id.fragmentHolder
এ, এ 1, এ 2, ইত্যাদি সম্পর্কে সম্মান কী ?