最近学习Android编程权威指南(第2版),学习到Recycleview控件时出现了一些小问题。
一、RecyclerView每个item占满了屏幕
解决方案:
1、检查item子项布局的layout_height是否为match_parent,如果是,改为wrap_content。
2、这个方法是百度大神看到的,直接在onCreateViewHolder方法中,把inflater方法中第二个参数改为null。
例:
View view = layoutInflater.inflate(R.layout.list_item_crime, parent, false);
把上面的parent改为null即可。
二、获取当前点击item的position。(用于单项更新item)
方案:在onBindViewHolder方法中setTag,在CrimeHolder类的点击事件中getTag。
例:
public void onBindViewHolder(CrimeHolder holder, int position) {
holder.itemView.setTag(position);
}
public void onClick(View v) {
int mPosition= (int) v.getTag();
}
三、运行时直接挂了,错误代码是:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.lightsensortest, PID: 6111
java.lang.NoSuchMethodError: No static method getDisplay(Landroid/view/View;)Landroid/view/Display; in class Landroid/support/v4/view/ViewCompat; or its super classes (declaration of 'android.support.v4.view.ViewCompat' appears in /data/data/com.example.lightsensortest/files/instant-run/dex/slice-com.android.support-support-v4-23.4.0_83f349ae45b4ac012684ad7b8d7a86d34cd85d6e-classes.dex)
at android.support.v7.widget.RecyclerView.onAttachedToWindow
刚开始愣是没知道怎么回事,百度了一下,知道了是RecyclerView的V7中的V4包与程序中用于FragmentActivity引入的V4包不一样导致的,检查了build.gradle,才知道是自己偷懒,直接alt+enter直接引用V4包,没有去Dependencies中添V4包。
解决方案:进入Android Studio 中的Dependencies,按左下角+号,选Library Dependency。 搜索com.android.support:support选最新的版本就行了(前提是RecyclerView也是从这里导入的)
重新运行时记得先把旧的项目卸载了,这样才会全部重新编译。