像这样的OnActivityCreate方法:
@OverrIDepublic voID onActivityCreated(Bundle inState) { super.onActivityCreated(inState); VIEwGroup base = (VIEwGroup) getVIEw(); TextVIEw tv = (TextVIEw) base.findVIEwByID(R.ID.monografiat); tv.setonClickListener(new OnClickListener() { @OverrIDe public voID onClick(VIEw v) { showStuff(); // MyFragment:150 } });}
其中showStuff()触发片段视图中的更改,就像更新项目的可见性一样简单:
private voID showStuff() { //MyFragment:95 VIEwGroup base = (VIEwGroup) getVIEw(); linearLayout ll = (linearLayout) base.findVIEwByID(R.ID.somevIEw); // MyFragment:97 ll.setVisibility(VIEw.VISIBLE);}
在我的测试中一切正常,大多数用户都可以这么说,但是今天我收到了来自Google Play开发人员控制台的单一ANR报告,说明该应用程序崩溃了,因为该行上有NullPointerException的用户:
linearLayout ll = (linearLayout) base.findVIEwByID(R.ID.somevIEw);
意思就是:
VIEwGroup base = (VIEwGroup) getVIEw();
返回null.这是报告:
java.lang.NullPointerException at mypackage.MyFragment.showStuff(MyFragment.java:97) at mypackage.MyFragment.accessif(base != null) {}(MyFragment.java:95) at mypackage.MyFragment.onClick(MyFragment.java:150) at androID.vIEw.VIEw.performClick(VIEw.java:2538) at androID.vIEw.VIEw$PerformClick.run(VIEw.java:9152) at androID.os.Handler.handleCallback(Handler.java:587) at androID.os.Handler.dispatchMessage(Handler.java:92) at androID.os.Looper.loop(Looper.java:123) at androID.app.ActivityThread.main(ActivityThread.java:3687) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:507) at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:600) at dalvik.system.NativeStart.main(Native Method)
我已经解决了问题(或者我认为,因为我没有复制的方法……)只需用以下方法围绕有问题的线:
我最好的猜测是,在MyFragment上调用onDestroyVIEw后调度回调,从而导致getVIEw()返回null.
尽管如此,我对这个错误感到非常困惑,所以我想了解你对这个问题的看法:
>假设我的hypotesys是正确的,当没有布局时执行OnClick回调是正常的,或者我可以将此行为视为一个错误(老实说:当我点击它时,视图显然是存在的,为什么它应该死包在我身上)?
>这个问题是否与我使用支持库(最新版本,2013年5月13日)有关?
>如果它不是一个错误,我错过了什么,你能指点我相关的文件吗?
感谢您的关注!
解决方法 直到Gingerbread在VIEw单击机制中存在一个错误,当VIEw从窗口分离时,没有从消息队列中删除执行单击的回调.这已在ICS(或可能在Honeycomb)中修复.因此,如果您支持Gingerbread或更低版本,并且您的单击侦听器访问在分离视图时删除的其他引用,那么您应确保在分离时删除单击侦听器.请注意,这适用于所有类型的单击侦听器,而不仅仅是OnClickListener.但是它不适用于长按侦听器,因为它们的回调从一开始就被正确删除.
总结以上是内存溢出为你收集整理的android – Fragment的getView()在OnClickListener回调中返回null全部内容,希望文章能够帮你解决android – Fragment的getView()在OnClickListener回调中返回null所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)