Search code examples
androidandroid-layoutandroid-widgetviewflipperandroid-gui

Android - error when using ViewFlipper


eveything looks to be fine, but I still get error when I try to change the view by pressing the button. Here is code:

    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();
    }

}

And here is my 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>

Anyone knows what can be wrong in this code? Thank you for answers!


Solution

  • Perhaps you should fix the name of your method to click ?

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

    Due the wrong spell (clcik) in our activity code, you may be getting a Exception because Android can't find the click method.

    And thanks to @yugidroid's answer I spot one more error on your code:

    public void onCreate(Bundle savedInstanceState) {

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

    You call findViewById before even you have any Views (a call to setContentView) . You will get a NullPointException because of that.

    I would recommend you to make a call to super.onCreate the very first line of your onCreate() method. That is what Google does.

    Regarding setting the click listener on layout or creating a listener and setting on the code. Well, there is not much difference, although the latter is certainly faster as the first uses reflection, what has a higher cost than just calling a method.