fragment的handler中getActivity空指针问题

来源:互联网 发布:网络信息员 编辑:程序博客网 时间:2024/05/16 07:06

问题产生环境:当fragment销毁后调用getActivity()方法。


测试代码:

package com.example.testgetactivity;import android.content.Context;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentActivity;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.Button;public class TestFragment extends Fragment {private Handler handler = new Handler(new Handler.Callback() {@Overridepublic boolean handleMessage(Message msg) {switch (msg.what) {case 0:Log.d("myTest", "context=" + context);Log.d("myTest", "getActivity()=" + getActivity());break;}return false;}});private Context context;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View rootView = inflater.inflate(R.layout.fragment_main, container,false);context = getActivity();Button btn = (Button) rootView.findViewById(R.id.button);btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {handler.sendEmptyMessageDelayed(0, 1000);((FragmentActivity) context).getSupportFragmentManager().popBackStack();}});return rootView;}}


测试结果:


原因:getActivity()实际上是调用this.getActivity();fragment已经释放的情况下,自然得到null。


总结:fragment的handler中尽量少使用getActivity(),可以用context代替。

0 0
原创粉丝点击