使用安卓拖放 API 时出错 - "Error inflating class Android.widget.ImageButton"



我正在尝试使用Androids拖放功能,如下所示:http://www.techrepublic.com/blog/software-engineer/try-androids-useful-drag-and-drop-api/

要使四个球在顶部和底部容器之间拖放。对于前三个,它运行良好。添加第四个黄色球会导致应用程序崩溃。我很困惑,因为我看不出我对待第四个球的方式有什么不同。拿走一个以前的球,换上新球,会得到同样的效果错误真的很高兴有任何想法!我正在使用eclipse。

这些文件不是上面链接中列出的"red_ball.xml",而是如下所示:

   <View xmlns:android="http://schemas.android.com/apk/res/android">
    <ImageView
    android:id="@+id/ball_yellow"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src = "@drawable/ball_8"
    />
    </View>

每个球的id和src值不同。

上面链接中的"activity_main.xml"文件在我的程序中是这样的,它被称为"startscreen.xml":

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:background="@drawable/green_bumped_mandelbrot_blackhole"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:weightSum="6"
        tools:context=".StartScreen" >
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical" >
            <LinearLayout
                android:id="@+id/containertop"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="2"
                android:orientation="horizontal" >
                <ImageButton
                    android:id="@+id/ball_red"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:background="@null"
                    android:onClick="playSound"
                    android:src="@drawable/ball_4" />
                <ImageButton
                    android:id="@+id/ball_blue"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:background="@null"
                    android:onClick="playSound"
                    android:src="@drawable/ball_6" />
                <ImageButton
                    android:id="@+id/ball_green"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:background="@null"
                    android:onClick="playSound"
                    android:src="@drawable/ball_7" />
                <ImageButton
                    android:id="@+id/ball_yellow"
                    android:layout_width="wrap_content" 
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:background="@null"
                    android:onClick="playSound"
                    android:src="@drawable/ball_8"/>
            </LinearLayout>

            <LinearLayout
                android:id="@+id/containerbottom"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="2"
                android:orientation="horizontal" >
                <ImageButton
                    android:id="@+id/teleporter"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:layout_weight="1"
                    android:background="@null"
                    android:onClick="loadOtherDimension"
                    android:src="@drawable/teleport_button" />
                <LinearLayout
                    android:id="@+id/black_hole"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:layout_weight="0.6"
                    android:background="@null"
                    android:src="@drawable/blank_square" >
                </LinearLayout>
                <ImageButton
                    android:id="@+id/square_red"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:layout_weight="1"
                    android:background="@null"
                    android:onClick="playSound"
                    android:src="@drawable/blank_square" />
            </LinearLayout>
        </LinearLayout>
    </RelativeLayout>

xml文件是这样使用的:

@Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);     
        setContentView(R.layout.startscreen);
        findViewById(R.id.ball_red).setOnTouchListener(this);
        findViewById(R.id.ball_blue).setOnTouchListener(this);
        findViewById(R.id.ball_green).setOnTouchListener(this);
        findViewById(R.id.ball_yellow).setOnTouchListener(this);
        findViewById(R.id.containertop).setOnDragListener(this);
        findViewById(R.id.black_hole).setOnDragListener(this);

我得到这个错误输出:

:44:15.647: E/AndroidRuntime(18105): FATAL EXCEPTION: main
04-22 22:44:15.647: E/AndroidRuntime(18105): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.gnyrfta.fallingobjects/com.gnyrfta.fallingobjects.StartScreen}: android.view.InflateException: Binary XML file line #25: Error inflating class android.widget.ImageButton
04-22 22:44:15.647: E/AndroidRuntime(18105):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at android.app.ActivityThread.access$700(ActivityThread.java:140)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at android.os.Handler.dispatchMessage(Handler.java:99)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at android.os.Looper.loop(Looper.java:137)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at android.app.ActivityThread.main(ActivityThread.java:4921)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at java.lang.reflect.Method.invokeNative(Native Method)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at java.lang.reflect.Method.invoke(Method.java:511)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at dalvik.system.NativeStart.main(Native Method)
04-22 22:44:15.647: E/AndroidRuntime(18105): Caused by: android.view.InflateException: Binary XML file line #25: Error inflating class android.widget.ImageButton
04-22 22:44:15.647: E/AndroidRuntime(18105):    at android.view.LayoutInflater.createView(LayoutInflater.java:619)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at android.view.LayoutInflater.onCreateView(LayoutInflater.java:666)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:691)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:752)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:760)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:760)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at android.view.LayoutInflater.inflate(LayoutInflater.java:495)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:316)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at android.app.Activity.setContentView(Activity.java:1924)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at com.gnyrfta.fallingobjects.StartScreen.onCreate(StartScreen.java:111)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at android.app.Activity.performCreate(Activity.java:5206)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
04-22 22:44:15.647: E/AndroidRuntime(18105):    ... 11 more
04-22 22:44:15.647: E/AndroidRuntime(18105): Caused by: java.lang.reflect.InvocationTargetException
04-22 22:44:15.647: E/AndroidRuntime(18105):    at java.lang.reflect.Constructor.constructNative(Native Method)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at android.view.LayoutInflater.createView(LayoutInflater.java:593)
04-22 22:44:15.647: E/AndroidRuntime(18105):    ... 26 more
04-22 22:44:15.647: E/AndroidRuntime(18105): Caused by: android.content.res.Resources$NotFoundException: File res/drawable/ball_4.xml from drawable resource ID #0x7f020007
04-22 22:44:15.647: E/AndroidRuntime(18105):    at android.content.res.Resources.loadDrawable(Resources.java:2265)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at android.widget.ImageView.<init>(ImageView.java:126)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at android.widget.ImageButton.<init>(ImageButton.java:87)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at android.widget.ImageButton.<init>(ImageButton.java:83)
04-22 22:44:15.647: E/AndroidRuntime(18105):    ... 29 more
04-22 22:44:15.647: E/AndroidRuntime(18105): Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #1: invalid drawable tag View
04-22 22:44:15.647: E/AndroidRuntime(18105):    at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:913)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at android.graphics.drawable.Drawable.createFromXml(Drawable.java:854)
04-22 22:44:15.647: E/AndroidRuntime(18105):    at android.content.res.Resources.loadDrawable(Resources.java:2262)
04-22 22:44:15.647: E/AndroidRuntime(18105):    ... 33 more

现在可以工作了!我只是想弄清楚为什么。。。我在sources文件夹中添加了一个名为ball_5.xml的文件,而不是ball_4.xml。如果我弄清楚为什么会有不同,我会发布它。

相关内容

最新更新