Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 修改自定义RecyclerView的项目_Java_Android_Android Recyclerview_Android Custom View - Fatal编程技术网

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
来呈现项目列表。原始问题没有任何相关信息。。你应该把它放在第一位:)我们在谈论什么样的修改?我很确定他们可以通过扩展适配器来修改适配器。他们将能够覆盖任何需要覆盖的方法。