【问题标题】:Android - error when using ViewFlipperAndroid - 使用 ViewFlipper 时出错
【发布时间】:2012-08-07 00:01:08
【问题描述】:

一切看起来都很好,但是当我尝试通过按下按钮更改视图时仍然出现错误。 这是代码:

    package com.example.testy;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.ViewFlipper;

public class MainActivity extends Activity {

    ViewFlipper flipper;

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        flipper = (ViewFlipper) findViewById(R.id.viewFlipper1);
        setContentView(R.layout.activity_main);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    public void clcik(View v) {
        flipper.showNext();
    }

}

这是我的 XML:

 <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:gravity="top" >

    <ViewFlipper
        android:id="@+id/viewFlipper1"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="click"
            android:text="Button!!" />

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView!!" />
    </ViewFlipper>

</RelativeLayout>

有人知道这段代码有什么问题吗? 谢谢你的回答!

【问题讨论】:

  • 为了有效使用ViewFlipper小部件,它应该使用LinearLayout来区分屏幕的单独“页面”...

标签: android android-layout android-widget viewflipper android-gui


【解决方案1】:

也许您应该将方法的名称固定为 click

 public void **clcik**(View v) {
        flipper.showNext();
    }

由于我们的活动代码中拼写错误 (clcik),您可能会收到一个异常,因为 Android 找不到 click 方法。

感谢@yugidroid 的回答,我在您的代码中发现了另一个错误:

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    flipper = (ViewFlipper) findViewById(R.id.viewFlipper1);
    setContentView(R.layout.activity_main);

}

您甚至在获得任何视图之前就致电findViewById(致电setContentView)。因此,您将获得 NullPointException。

我建议您在onCreate() 方法的第一行调用super.onCreate。那是what Google does

关于在布局上设置点击监听或者在代码上创建监听和设置。嗯,没有太大区别,虽然后者肯定更快,因为第一个使用反射,这比仅仅调用一个方法成本更高。

【讨论】:

    【解决方案2】:

    首先,确保你在 super 之后调用setContentView(R.layout.activity_main);,这是一个很好的做法。

    您的问题是您设置了android:onClick="click",但您在Java 中引用了错误的方法(clcik 不存在)。

    我建议您在活动中声明和设置侦听器,而不是在 xml 中。

    【讨论】:

      猜你喜欢
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      • 1970-01-01
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多