1.经常遇到的getActivity = null的情况?
有的时候我们在两个fragment之间进行切换的时候,fragment很容易崩溃,这是因为frament销毁了,getActivity还在使用导致的,修改办法:
(1)使用application 的context
public class MyApplication extends Application {
private static MyApplication instance;
@Override
public void onCreate() {
super.onCreate();
instance = this;
}
public static MyApplication getInstance() {
return instance;
}
}
(2)fragment 中 context使用 举个例子
if(getActivity()==null){
inflater = LayoutInflater.from(MyApplication.getInstance());
}else {
inflater = LayoutInflater.from(getActivity());
}
2.切记使用在Application类定义全局的集合,这样在fragment切换的时候很容易造成数据莫名其妙的重复,而且是时而正常,时而不正常,不建议这样写集合
public class MyApplication extends Application {
public static ArrayList<hysliebiaoBean> hyslbList = new ArrayList<>();
}
public class DemoFragment extends Fragment {
MyApplication.hyslbList//不建议这样写
}
3.No view found for id xxxx for fragment xxxx 问题的方案
这个问题原因有好多种,但是我的原因是这样的: 凡是在fragment中使用fragment的,
子fragment一般这样写
getFragmentManager().beginTransaction().replace(R.id.daibanfl, daiBanShenHeFragment).commit();中getFragmentManager()改为
getChildFragmentManager()
4.凡是跟UI相关的,都应该使用Activity做为Context来处理;其他的一些操作,Service,Activity,Application等实例都可以,当然了,注意Context引用的持有,防止内存泄漏。
能使用Application的context的时候尽量使用Application的,减少内存开支。
网友评论