0

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!

michalsol
  • 752
  • 8
  • 29
  • For effective usage of `ViewFlipper` widget, it should be using the `LinearLayout` to distinguish separate "pages" of screen... – t0mm13b Aug 07 '12 at 00:18

2 Answers2

1

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.

André Oriani
  • 3,553
  • 22
  • 29
0

First of all, make sure you call setContentView(R.layout.activity_main); after the super, its a good practice.

Your problem is that you set android:onClick="click" but you are refering the wrong method in Java (clcik doesn't exists).

I advice you to declare and set listeners in the activity, not in the xml.

yugidroid
  • 6,640
  • 2
  • 30
  • 45