文章目录

android应用开发过程中,总会遇到一些坑。当遇到这些坑马上反应过来时,会很快解决。而没有反应过来时,估计是要折腾半天,下面记录一些这样的坑,防止自己遗忘再犯同样的错,自己以后再遇到类似的问题,也在这里记录下来。

  • 1.context.startActivityForResult(intent, int)第二个参数int值要为大于0,并且不大于65535。

如果为不大于0,则不会回调到Activity的onActivityResult()方法。如果大于65535为提示如下错误:

1
2
Caused by: java.lang.IllegalArgumentException: Can only use lower 16 bits for requestCode
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:840)

出现这种问题只有在Activity继承了android.support.v4.app.FragmentActivity的时候才会出现,而继承android.app.Activity的时候不会。所以为了不必要的麻烦,还是建议使用requestCode的值要不大于65535

因为在同一个Activity和其中的Fragment都使用到了onActivityResult()方法,为了避免Activity的requestCode不与Fragment冲突,所以就使用了Integer.MAX_VALUE,结果就导致了上面的异常。

  • 2.重写Activity的onActivityResult()方法时,如果在该Activity中使用了Fragment,并且重写了Fragment的onActivityResult()方法,此时一定要在Activity的onActivityResult()方法中调用super.onActivityResult(),否则Fragment的onActivityResult()方法不会被回调。

  • 3.在Fragment切换的布局中使用了FrameLayout后,为了能切换更快,使用了FragmentTransaction.hide()方法,将已经初始化的Fragment隐藏,而没有使用FragmentTransaction.replace()方法。其中有一个Fragment中的布局文件中的内容没有超过一屏,在点击底部空白的地方,会点击之前已经隐藏的Fragment的中布局文件中的组件。归根倒底是由于FrameLayout布局影响的,最快的解决办法是在内容没有超过一屏的布局文件中的根ViewGroup中设置`android:clickable=”false”即可,当然网上说重写onTouchEvent()方法,可以试试。

  • 4.在给ListView调用addHeader()方法添加头部时,一定要在调用setAdapter()方法之前调用,否则会出现如下错误, 这个错误在android 4.4以前的系统会存在,4.4及以后的系统中修复了这个问题。错误提示也很明显:

1
java.lang.IllegalStateException: Cannot add header view to list -- setAdapter has already been called.
at android.widget.ListView.addHeaderView(ListView.java:261)
at android.widget.ListView.addHeaderView(ListView.java:290)
// ...
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1962)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1026)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1207)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1572)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:493)
at android.os.Handler.handleCallback(Handler.java:800)
文章目录