通过添加ViewFlipper / Showing Null Object Refrence,应用程序崩溃

时间:2016-12-22 08:04:02

标签: android android-animation android-viewflipper

我正在使用Android中的View Flipper。编译时没有显示任何错误。但是一旦应用程序在我的移动设备中启动,它就会崩溃。因为我是Android的初学者,并且没有足够的知识。 报告错误显示调用viewFlipper.getDisplayChild()的空指针异常  主要的java文件代码是

package com.example.joshiyogesh.classapplication;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.widget.ViewFlipper;

public class MainActivity extends Activity {

    public ViewFlipper viewFlipper;
    public float lastX;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        viewFlipper = (ViewFlipper)findViewById(R.id.view_flipper);
    }


    public boolean onTouchEvent(MotionEvent touchEvent){


        switch (touchEvent.getAction()){
            case MotionEvent.ACTION_DOWN:
            {
                lastX = touchEvent.getX();
                break;
            }
            case MotionEvent.ACTION_UP:
            {
                float currentX = touchEvent.getX();

                if (lastX<currentX){
                    if(viewFlipper.getDisplayedChild() == 0)
                        break;
                    viewFlipper.setInAnimation(this,R.anim.in_from_left);
                    viewFlipper.setOutAnimation(this,R.anim.out_from_right);
      //show next Screen
                    viewFlipper.showNext();
                }
                if(lastX>currentX){
                    if(viewFlipper.getDisplayedChild()==1)
                        break;
                    viewFlipper.setInAnimation(this,R.anim.in_from_right);
                    viewFlipper.setOutAnimation(this,R.anim.out_from_left);
                    viewFlipper.showPrevious();
                }

               break;
            }
        }


        return false;
    }
}

ViewFlipper的文件代码是

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ViewFlipper
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/view_flipper"
        android:layout_margin="6dip">

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:gravity="center"
            android:orientation="vertical"
            >
    <ImageView
    android:layout_width="450dp"
    android:layout_height="450dp"
    android:layout_marginTop="15dp"
    android:id="@+id/image_view1"
    android:src="@drawable/images"/>
        </LinearLayout>



    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center"
        android:orientation="vertical"
        >
        <ImageView
            android:layout_width="450dp"
            android:layout_height="450dp"
            android:layout_marginTop="15dp"
            android:id="@+id/image_view2"
            android:src="@drawable/large"/>
    </LinearLayout>




    </ViewFlipper>
</LinearLayout>

任何帮助都会感激不尽。谢谢。

更新 Report Bug shown by devices

1 个答案:

答案 0 :(得分:0)

当使用onTouchEvent时,如果没有其他函数首先调用它(ontouch listener onclick listener),活动将直接发送给它,你有两个选项

选项1

在使用

之前检查viewFlipper是否为null

选项2 在findviewbyid到flipper之后使用ontouchlistener oncreate

viewFlipper.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_UP){

        // Do what you want
            return true;
        }
        return false;
    }
});