views:

873

answers:

3

Hello,

I'm having a problem including a different layout through the include tag in the android layout xml file. When specifing the layout reference ( @layout/... ), i'm getting a InflateException in the Eclipse ADT with the following error: InflateException: You must specifiy a valid layout reference. The layout ID @layout/func_edit_simple_calculator_toolbox is not valid.

the reference should be valid, as I've selected it from the the list of my other layouts and didnt type it in. I'm using android sdk v2.1

these are the layout files

func_edit_simple_calculator_toolbox.xml

<?xml version="1.0" encoding="utf-8"?>
<TableLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_height="wrap_content" android:layout_width="wrap_content">

<TableRow android:id="@+id/TableRow01" android:layout_width="wrap_content"android:layout_height="wrap_content">
<Button android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="1"></Button>
<Button android:id="@+id/Button02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="2"></Button>
<Button android:id="@+id/Button03" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="3"></Button>
<Button android:id="@+id/Button04" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="+"></Button>
</TableRow>
<TableRow android:id="@+id/TableRow02" android:layout_width="wrap_content" android:layout_height="wrap_content">
<Button android:id="@+id/Button05" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="4"></Button>
<Button android:id="@+id/Button06" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="5"></Button>
<Button android:id="@+id/Button07" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="6"></Button>
<Button android:id="@+id/Button08" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="-"></Button>
</TableRow>
</TableLayout>

function_editor_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >

<com.calculoid.FunctionView android:id="@+id/function_view" android:layout_width="fill_parent" android:layout_height="fill_parent"/>

<include android:id="@+id/include01" android:layout_width="wrap_content" android:layout_height="wrap_content" layout="@layout/func_edit_simple_calculator_toolbox"></include>
</LinearLayout>

Does any one know what could be the problem?

thanks in advance

A: 

I don't see anything immediately wrong with that, so that's a bit odd. I can only think of two things: 1) Have you tried using a shorter file name? There are a few restrictions on what's acceptable in a file name, e.g. no uppercase characters or symbols, in order to ensure compatibility and file name length might be one of them. 2) Have you tried removing some of your android:... statements in the include, and leaving it at just <include layout="@layout/..."/>? You don't actually need to specify its height and width in the include as that's already defined in the imported layout file.

Steve H
I'm honestly not really sure what has "solved" it, but it seems to work, at least for now. I was just playing around with different layout settings. One other thing that comes to mind is that I've overriden the onMeasure( int, int ) method in my custom view with just a simple body ( before, the FunctionView contained only the autogenerated constuctors ). Thanks for the tips anyway
Dalibor Frivaldsky
Hmm. Well, I'm glad you've managed to solve your problem, however you managed to do it! However, you really shouldn't have an empty onMeasure(int, int) function - I imagine that will start breaking things if your layout gets more complicated. Also there's a bit of 'paperwork' for you to do, if you're willing to. Stack Overflow tracks whether questions have been solved or not by whether a question has an "accepted answer". Currently this question will still appear in the unsolved questions list - could you either accept this answer, or -
Steve H
or write your own answer, even if it just says points them to read your comment to this answer? It's just a matter of keeping the site tidy.
Steve H
no, the onMeasure(int,int) was not empty, it was not defined in the derived class at all ( as I said, only the constructors were defined ), so the View class' implementation has done the work for it. I will close the question
Dalibor Frivaldsky
A: 

I've "solved" the problem, but I dont know what really helped. My layout files did not went through any major rewrite and practically contain the same. The only notable change I've done before the problem went away was to override the onMeasure( int, int ) method in my custom view class, with the implementation just calling setMeasuredDimension( 100, 100 ).

Dalibor Frivaldsky
A: 

I think i should mention how i solved the same problem. Tried cleaning the project and didn't work. I have quite large names for the layout (chrono_first_small_field), and that wasn't the cause either. Closed Eclipse, and just opened it again, and that worked.

That makes more sense than having to implement the setMeasuredDimension method :-)

ggomeze