我正在尝试创建自定义 RecyclerView
。
首先,我只想旋转附加到我的 recyclerView
的列表的第一个元素。
这是我试图通过重写 setAdapter
方法来实现的:
public class CustomList extends RecyclerView {
public CustomList(Context context) {
super(context);
init(context);
}
public CustomList(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init(context);
}
public CustomList(Context context, @Nullable AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context);
}
public void init(Context context) {
}
@Override
public void setAdapter(Adapter adapter) {
super.setAdapter(adapter);
getChildAt(0).setRotation(45);
}
@Override
public void setLayoutManager(LayoutManager layout) {
super.setLayoutManager(layout);
}
}
但每次尝试更改列表中的元素时都会出现此错误:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setRotation(float)' on a null object reference
我想一个一个的获取这个RecyclerView的items来修改。是否可以到达我的 RecyclerView 的每个项目以添加修改?知道我实际上是在创建一个自定义 View 扩展 RecyclerView 而不是 RecyclerView 适配器。
最佳答案
应用程序崩溃是因为您试图访问不存在的 View 。当您调用 setAdapter
时,它只是创建适配器对象并将其设置为 RecyclerView
。那时 child 还没有被创建,所以 getChildAt(0)
返回 null
并且你得到了崩溃。
相反,您应该使用适配器进行项目 View 操作。在您的适配器中覆盖 onBindViewHolder
方法并在那里执行。每次当项目 View 绑定(bind)到 RecyclerView
时都会调用该方法。它有一个位置参数,您可以使用该参数仅旋转列表中的第一项。
关于java - 修改自定义 RecyclerView 的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50925519/