整理了一些平时遇到的问题,不是很高级,但是有时候忘记了也是很麻烦的

SwipeRefreshLayout自动刷新

初次进入页面自动刷新直接使用

1
swipeRefreshLayout.setRefreshing(true)

是无效的

可以使用以下方法

1
2
3
4
5
6
swipeRefreshLayout.post(new Runnable() {
@Override
public void run() {
swipeRefreshLayout.setRefreshing(true);
}
});

Fragment 嵌套 Fragment 白屏问题

Fragment嵌套Fragment时,里面要用getChildFragmentManager。

1
2
FragmentManager childFragmentManager = getChildFragmentManager();
ViewPager_Adapter viewPager_adapter = new ViewPager_Adapter(childFragmentManager, fragments);    //FragmentPagerAdapter

No layout manager attached; skipping layout错误

原因是没有设置LayoutManager

1
2
3
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));//这里用线性显示 类似于listview
// mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2));//这里用线性宫格显示 类似于grid view
// mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, OrientationHelper.VERTICAL));//这里用线性宫格显示 类似于瀑布流

在Xml文件中使用tools命名空间

  • 为了看到预览效果,我们常常会在xml文件中添加测试数据,但是写完之后,常常忘记删除,这样会显示无用数据
  • 我们可以通过tools命名空间解决
1
xmlns:tools="http://schemas.android.com/tools"
  • tools可以告诉Android Studio,哪些属性在运行的时候是被忽略的,只在设计布局的时候有效。
  • 比如我们要让android:text属性只在布局预览中有效可以这样
1
2
3
4
5
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="show for preview" />

commit()apply()的区别

  • commit() 在保存成功会返回True,否则会返回False
  • apply() 没有返回值,因为是异步,所以更快
  • 所以不需要返回值的时候最好用apply()

给ListView的item设定高度无效

  • 给item设置minHeight
  • 给item中的控件设置高度,撑大item

使用getBackground().setAlpha,导致其他布局背景透明度都改变的问题

在布局中多个控件同时使用一个资源的时候,这些控件会共用一个状态,例如ColorState,如果你改变了一个控件的状态,其他的控件都会接收到相同的通知。这时我们可以使用mutate()方法使该控件状态不定,这样不定状态的控件就不会共享自己的状态了。

1
titleLayout.getBackground().mutate().setAlpha(255);

android.content.res.Resources$NotFoundException: String resource ID

在setText()中使用了int的参数,被误以为Resources的ID,更改为String类型就行

从Eclipse迁移到Android Studio出现错误(找不到.9文件)

  • 需要重新制作.9文件
  • AS中可以对.9文件直接修改,亦可以使用sdk中的draw9patch.bat来制作

在Android studio 里面要求 .9图片必须要 左侧和上侧都要画线,如果只有一侧画线会导致运行不起来。切记 !!!

关于Fragment(XXFragment) not attached to Activity 异常

  • 出现该异常,是因为Fragment的还没有Attach到Activity时,调用了如getResource()等,需要上下文Context的函数。解决方法,就是等将调用的代码写在OnStart()中。
  • stackoverflow回答