Error inflating class button

Tye Hetherington picture Tye Hetherington · May 15, 2013 · Viewed 8.6k times · Source

I just started learning Computer Science and Android development. I've been going through some helloworld demos to try and learn.

So going wild, I tried to rewrite a program that has one button for two buttons using the onClickListener. While I don't have any compiling errors, my program is force closing on me:

01-05 11:20:33.968: E/AndroidRuntime(3257): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.multbuttontest/com.example.multbuttontest.MultiButtonActivity}: android.view.InflateException: Binary XML file line #16: Error inflating class button

My XML file looks like so (Sorry I suck at formatting):

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MultiButtonActivity">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world" />

<button 
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

<button
    android:id="@+id/button2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

and code:

package com.example.multbuttontest;

import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.Button;

public class MultiButtonActivity extends Activity implements View.OnClickListener{

Button button1, button2;
int touchCount1, touchCount2;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_multi_button);

    button1 = (Button) findViewById(R.id.button1);
    button1.setText( "Touch Button 1!");
    button1.setOnClickListener(this);

    button2 = (Button) findViewById(R.id.button2);
    button2.setText( "Touch Button 2!");
    button2.setOnClickListener(this);
}

public void onClick(View v){
    switch(v.getId()){
        case R.id.button1:
            touchCount1++;
            button1.setText("Touched b1 " + touchCount1 + " times(s)");
            break;
        case R.id.button2:
            touchCount2++;
            button2.setText("Touched b2 " + touchCount2 + " times(s)");
            break;
    }
}
}

This is strictly just for my learning purposes, and the code does suck. Any help would be appreciated.

Answer

Ahmad picture Ahmad · May 15, 2013

It's not button, it's Button. The XML tag points to the java class in the framework. And Java is case sensitive.

<Button 
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

<Button
    android:id="@+id/button2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />