Java 修改自定义RecyclerView的项目
我正在尝试创建一个自定义的Java 修改自定义RecyclerView的项目,java,android,android-recyclerview,android-custom-view,Java,Android,Android Recyclerview,Android Custom View,我正在尝试创建一个自定义的RecyclerView 首先,我只想旋转附加到我的recyclerView的列表的第一个元素 下面是我通过重写setAdapter方法尝试执行的操作: public class CustomList extends RecyclerView { public CustomList(Context context) { super(context); init(context); } public Custom
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);
}
}
但每次尝试更改列表中的某个元素时,都会出现此错误:
原因:java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“void android.view.view.setRotation(float)”
我想让这个RecyclerView项目一个接一个地修改它们。是否可以访问我的RecyclerView的每个项目以添加它们?知道我实际上是在创建一个扩展RecyclerView的自定义视图,而不是一个RecyclerView适配器应用程序崩溃,因为您试图访问一个不存在的视图。调用
setAdapter
时,它只创建适配器对象并将其设置为RecyclerView
。当时还没有创建子项,因此getChildAt(0)
返回null
,您将得到崩溃
相反,您应该使用适配器进行项目视图操作。在适配器中重写onBindViewHolder方法,并改为在那里执行。每次将项目视图绑定到RecyclerView
时,都会调用该方法。它有一个位置参数,可用于仅旋转列表中的第一项
这里的更多信息:@GennadiiSparykin我应该改为使用我的CustomView扩展RecyclerView.Adapter并重写我的onBindViewHolder方法吗?在这种情况下,我认为您不需要自定义
RecyclerView
。使用普通的。是的,扩展RecycerView.Adapter
并覆盖onBindViewHolder
。不幸的是,我必须创建一个自定义RecyclerView
,这就是我的观点。我正在创建一个库,我希望使用它的人不必在自己的RecyclerView.Adapter
中添加任何内容即可使用它。我希望我的修改能自动工作。在这种情况下,不管这是否是一个库。如果您希望人们不添加任何内容,只需向他们公开您的RecyclerView.Adapter
。将使用您的库的客户端将创建一个普通的RecyclerView
,然后调用RecyclerView.setAdapter(new YourAdapter())代码>并将获得旋转功能。没有理由创建空的RecyclerView
包装,因为其中没有自定义内容。客户端仍然需要调用setAdapter
来呈现项目列表。原始问题没有任何相关信息。。你应该把它放在第一位:)我们在谈论什么样的修改?我很确定他们可以通过扩展适配器来修改适配器。他们将能够覆盖任何需要覆盖的方法。