arberb
arberb

Reputation: 960

Why am I getting a CircularDependencyException?

Hey I am trying to make a notification for my file uploading notification. This is my XML: but it keeps giving me the error: Circular dependencies cannot exist in RelativeLayout. What am I doing wrong? I dont see anything wrong with it? I was also trying to make it look similar to the browser downloader

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:padding="5dp">

    <RelativeLayout 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" 
        android:id="@+id/left"
        android:layout_toLeftOf="@+id/right">

        <ImageView 
            android:id="@+id/status_icon"
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" 
            android:layout_alignParentTop="true" 
        />

        <TextView 
            android:id="@+id/progress_text" 
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" 
            android:layout_below="@+id/status_icon"
            android:text="0%"
        />


    </RelativeLayout>

    <RelativeLayout 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" 
        android:id="@+id/right"
        android:layout_toRightOf="@+id/left">

        <TextView 
            android:id="@+id/status_text" 
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" 
            android:layout_alignParentTop="true" 
        />

        <ProgressBar 
            android:id="@+id/status_progress"
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content"
            android:layout_below="@id/status_text"
            android:progressDrawable="@android:drawable/progress_horizontal"
            android:indeterminate="false" 
            android:indeterminateOnly="false" 
        />
    </RelativeLayout>
</RelativeLayout>

Upvotes: 4

Views: 5691

Answers (3)

Luna Kong
Luna Kong

Reputation: 3155

You try to refer two layouts each other in your layout. A part of codes shows as below,

<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <RelativeLayout
        android:id="@+id/left"
        android:layout_toLeftOf="@+id/right" />
    <RelativeLayout
        android:id="@+id/right"
        android:layout_toRightOf="@+id/left" />
 </RelativeLayout>

It will occur circular dependency exception.

How to fix?

Set gravity type of one layout, Other layout refers this.

For this case, remove android:layout_toRightOf="@+id/left"

Because default layout gravity is left, then remove this line. It will be fine.

Have fun @.@

Upvotes: 0

onit
onit

Reputation: 6366

Remove the line android:layout_toLeftOf="@+id/right". You are declaring left to be to the left of right, and then right to be to the right of left. Its a circular dependency because it does not know which element to lay out first.

Upvotes: 3

ahodder
ahodder

Reputation: 11439

RelativeLayout "left" is trying to lay itself out based on the location of RelativeLayout "right". This cannot be done, because as the exception says, it's circular. How can you park a car based on the parking of another car if that car is still moving?

Based on your xml file, I recommend you use LinearLayouts. There really isn't anything that you are doing here that can't be solved with two LL's and the parent RelativeLayout.

Upvotes: 9

Related Questions