2016-10-25 15 views
5

Vì vậy, tôi tiếp tục nhận được lỗi "java.lang.RuntimeException: Biểu đồ này chứa các phụ thuộc cyclic" mà tôi khá chắc chắn đã gây ra bởi một hành vi tôi có mà kéo dài từ AppBarLayout.ScrollingViewBehavior. Tôi có một bố trí với một AppBarLayout sử dụng hành vi này và lỗi biến mất nếu tôi loại bỏ các hành vi. Dưới đây là các lỗi và mã cho hành viAppBarLayout ScrollingViewBehavior cho tôi một lỗi "java.lang.RuntimeException: Biểu đồ này chứa các phụ thuộc cyclic" lỗi

E/AndroidRuntime: FATAL EXCEPTION: main 
Process: yu.heetae.android.mergingtoolbar, PID: 26027 
java.lang.RuntimeException: This graph contains cyclic dependencies 
at android.support.design.widget.DirectedAcyclicGraph.dfs(DirectedAcyclicGraph.java:164) 
at android.support.design.widget.DirectedAcyclicGraph.dfs(DirectedAcyclicGraph.java:172) 
at android.support.design.widget.DirectedAcyclicGraph.dfs(DirectedAcyclicGraph.java:172) 
at android.support.design.widget.DirectedAcyclicGraph.getSortedList(DirectedAcyclicGraph.java:152) 
at android.support.design.widget.CoordinatorLayout.prepareChildren(CoordinatorLayout.java:658) 
at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:706) 
at android.view.View.measure(View.java:18794) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135) 
at android.view.View.measure(View.java:18794) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465) 
at android.widget.LinearLayout.measureVertical(LinearLayout.java:748) 
at android.widget.LinearLayout.onMeasure(LinearLayout.java:630) 
at android.view.View.measure(View.java:18794) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
at android.view.View.measure(View.java:18794) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465) 
at android.widget.LinearLayout.measureVertical(LinearLayout.java:748) 
at android.widget.LinearLayout.onMeasure(LinearLayout.java:630) 
at android.view.View.measure(View.java:18794) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2643) 
at android.view.View.measure(View.java:18794) 
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2100) 
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1216) 
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1452) 
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107) 
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013) 
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858) 
at android.view.Choreographer.doCallbacks(Choreographer.java:670) 
at android.view.Choreographer.doFrame(Choreographer.java:606) 
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5417) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
public class MergedAppbarBehavior extends AppBarLayout.ScrollingViewBehavior { 

    private Toolbar mToolbar; 
    private View mBackground; 
    private FrameLayout.LayoutParams mBackgroundLayoutParams; 

    private Context mContext; 

    private boolean isInit = false; 

    public MergedAppbarBehavior(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     mContext = context; 
    } 

    @Override 
    public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency) { 
     return dependency instanceof NestedScrollView; 
    } 

    @Override 
    public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency) { 
     if(!isInit) { 
      init(child); 
      return false; 
     } 

     if(isDependencyYBelowToolbar(child, dependency) && ! isDependencyYReachTop(dependency)) { 
      setToolbarBackground(android.R.color.transparent); 
      setPartialBackgroundHeight((int)((child.getHeight() + child.getY()) - dependency.getY())); 
     } else if(isDependencyYBelowStatusToolbar(child, dependency) || isDependencyYReachTop(dependency)) { 
      setToolbarBackground(Color.parseColor("#3F51B5")); 
      setPartialBackgroundHeight(0); 
     } 

     return false; 
    } 

    private void init(View child) { 
     AppBarLayout appBarLayout = (AppBarLayout) child; 

     mToolbar = (Toolbar) appBarLayout.findViewById(R.id.toolbar); 
     mToolbar.setTitle(" "); 
     mBackground = appBarLayout.findViewById(R.id.background_view); 
     mBackgroundLayoutParams = (FrameLayout.LayoutParams) mBackground.getLayoutParams(); 

     setToolbarBackground(android.R.color.transparent); 
     setPartialBackgroundHeight(0); 

     isInit = true; 
    } 

    private boolean isDependencyYBelowToolbar(View child, View dependency){ 
     return dependency.getY() <= child.getY() + child.getHeight() && dependency.getY() > child.getY(); 
    } 

    private boolean isDependencyYBelowStatusToolbar(View child, View dependency){ 
     return dependency.getY() <= child.getY(); 
    } 

    private boolean isDependencyYReachTop(View dependency){ 
     return dependency.getY() == 0; 
    } 

    private void setPartialBackgroundHeight(int height){ 
     mBackgroundLayoutParams.height = height; 
     mBackground.setLayoutParams(mBackgroundLayoutParams); 
    } 

    private void setToolbarBackground(int color) { 
     mToolbar.setBackgroundColor(ContextCompat.getColor(mContext, color)); 
    } 
} 
+0

bạn đã tìm ra? – Anton

+0

Không, không thể tìm thấy giải pháp hay bất kỳ điều gì về lỗi. Kết thúc lên chỉ cần tổ chức lại bố trí của tôi và sử dụng CoordinatorLayout.Behavior <> thay vì – user1840378

Trả lời

0

tôi đã cùng một vấn đề với một FloatingActionButton. Tôi vừa xóa dòng này khỏi XML

app:layout_anchor="@id/list_view" 
1

Không thực sự là vấn đề hoạt động nữa, nhưng trong trường hợp ai đó gặp phải lỗi tương tự: Kiểm tra ứng dụng của bạn: layout_anchors.

Lỗi này chỉ xảy ra đối với tôi khi tôi đã có một thiết lập tương tự như sau:

<View 
    android:id="@+id/firstView" 
    app:layout_anchor="@+id/secondView" /> 

<View 
    android:id="@id/secondView" 
    app:layout_anchor="@id/firstView" /> 

Tất nhiên trường hợp thực tế là một chút phức tạp hơn đó là cách này trượt trong để bắt đầu với. Dù sao, lỗi gợi ý tại một vòng lặp phụ thuộc.

+0

Mặc dù đối với tôi, nó chỉ là sự hiện diện của một neo mà không có bất kỳ sự phụ thuộc tuần hoàn nào. Đã kết thúc bằng cách sử dụng chiều cao và lề để xem bố cục. –

Các vấn đề liên quan