簡體   English   中英

為什么在此項目中出現NullPointerException?

[英]Why am I getting a NullPointerException in this project?

現在,這個問題已經病入膏address。 這是我的工作代碼:

package edu.wmich.lab4_jjohns1119;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.view.animation.AnimationUtils;
import android.view.animation.Animation;

public class MainFragment extends Fragment {

//Declare widget objects
Button btnAnimate;
ImageView imgTween;
Animation tweenAnimation;

//create view
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

//Inflater
View rootView = inflater.inflate(R.layout.fragment_main, container,false);
//Button
     btnAnimate = (Button)rootView.findViewById(R.id.btnAnimate);   
     //Image
     imgTween = (ImageView)rootView.findViewById(R.id.imgTween);
     //Animation Resource
    tweenAnimation = AnimationUtils.loadAnimation(getActivity(), R.anim.tween1);
//Button listener for animation
btnAnimate.setOnClickListener(new View.OnClickListener(){

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        //animate image
        imgTween.startAnimation(tweenAnimation);
    }

});
//Return view
return rootView;
}
}

它啟動,導航,但是動畫什么也沒做。 我的猜測是代碼的順序是不正確的廣告,它在動畫之前顯示視圖。 這是我的tween1.xml:

<?xml version="1.0" encoding="utf-8"?>
<rotate
xmlns:android="http//schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:toDegrees="-45"
android:duration="400"
 />

您的問題在於分配您的tweenAnimation字段

Animation tweenAnimation = AnimationUtils.loadAnimation(getActivity(), R.anim.tween1);

在片段生命周期(創建)中,此時的getActivity()為null,這將導致loadAnimation失敗或返回null動畫。 然后訪問它會導致一個NPE(如果loadAnimation尚未拋出)

將分配tweenAnimation的位置移動到片段生命周期中活動將存在的點,如onCreate

恩。

Animation tweenAnimation;
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreat(savedInstanceState);
    tweenAnimation = AnimationUtils.loadAnimation(getActivity(), R.anim.tween1);
}

為什么要使用getView()? 將所有作業移到rootView下方並執行以下操作:

btnAnimate = (Button)rootView.findViewById(R.id.btnAnimate);

為了使動畫正常工作,請將名稱空間聲明更改為:

http://schemas.android.com/apk/res/android

(請注意,示例中缺少http后的冒號)

....

問題是您無法在活動完成構建之前調用getView()getActivity() 因此,您只需要在以后通過覆蓋onActivityCreated(...)方法來調用這些方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM