14

Đây là tình hình:Android Fragment Animation onResume

Tôi đang sử dụng đoạn trẻ được giới thiệu với API 17. Nói rằng tôi có

ActivityA -> FragmentA 
ActivityA -> FragmentB 

FragmentA -> ChildFragmentA 
FragmentA -> ChildFragmentB 

Vì vậy, tôi đang trên ActivityA->FragmentA->ChildFragmentA và tôi chuyển sang ActivityA->FragmentA->ChildFragmentB với một FragmentTransaction bằng cách sử dụng các hoạt ảnh để thêm vào backstack và popping backstack (có một hình ảnh động khi tôi đi đến ChildFragmentB và một hình ảnh động khi tôi bấm lại và di chuyển đến ChildFragmentA).

Bây giờ tôi điều hướng đến ActivityA->FragmentB (FragmentA không được đính kèm lâu). Khi tôi điều hướng quay lại ActivityA->FragmentA nơi hiển thị ChildFragmentB, ChildFragmentB hoạt ảnh như khi thực hiện từ ChildFragmentA.

Tôi muốn tắt hoạt ảnh này khi tiếp tục . Nhưng giữ nó khi chuyển đổi giữa các mảnh trẻ em. Hoạt ảnh này được đặt trong FragmentTransaction. Có cách nào để thực hiện điều này không?

+1

Bạn đã cố gắng giữ một giá trị trong đó hoạt động hoặc đoạn bạn đang đến từ và thiết fragmenttransaction bạn cho phù hợp? Giống như 'ft.setCustomAnimations (FragmentTransaction.TRANSIT_NONE, FragmentTransaction.TRANSIT_NONE);' khi bạn không muốn bất kỳ sự chuyển đổi nào. Tôi không chắc chắn nơi bạn đang xác định FragmentTransaction của bạn vì vậy tôi không biết nếu điều này làm việc cho bạn. – SvenT23

Trả lời

0

Cố gắng vô hiệu hóa các onAttach chuyển trong ActivityA-> FragmentA và kích hoạt lại nó một lần nữa onResume trong ChildFragments của cả hai FragmentA và B

3

tôi giải quyết điều này bằng cách thêm một số logic để đoạn mẹ để phát hiện khi nó là bị ẩn hoặc hiển thị và vô hiệu hóa hoặc bật hoạt ảnh một cách rõ ràng trong con của nó.

@Override 
public void onPause() { 
    super.onPause(); 
    // If this fragment is being closed/replaced then disable animations 
    // in child fragments. Otherwise we get very nasty visual effects 
    // with the parent and child animations running simultaneously 
    ChildFragment f = (ChildFragment) getChildFragmentManager() 
             .findFragmentByTag(FRAGMENT_CHILD); 
    if (f != null) { 
     f.disableAnimations(); 
    } 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    // if this fragment is being opened then re-enable animations 
    // in child fragments 
    ChildFragment f = (ChildFragment) getChildFragmentManager() 
             .findFragmentByTag(FRAGMENT_CHILD); 
    if (f != null) { 
     f.enableAnimations(); 
    } 
} 

Trong đoạn con, chúng ta cần triển khai các phương pháp đó để bật/tắt hoạt ảnh. Chúng tôi thực hiện việc này bằng cách ghi đè onCreateAnimation() và sử dụng hoạt ảnh tĩnh (R.anim.hold) trong trường hợp nên tắt hoạt ảnh.

private boolean mDisableAnimations; 

void disableAnimations() { 
    mDisableAnimations = true; 
} 

void enableAnimations() { 
    mDisableAnimations = false; 
} 

@Override 
public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) { 
    if (mDisableAnimations) { 
     return AnimationUtils.loadAnimation(getActivity(), R.anim.hold); 
    } 
    return super.onCreateAnimation(transit, enter, nextAnim); 
} 

Các hoạt hình tĩnh được định nghĩa trong res/anim/hold.xml như:

<?xml version="1.0" encoding="utf-8"?> 
<translate 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromXDelta="0" 
    android:toXDelta="0" 
    android:duration="2000" /> 
Các vấn đề liên quan