Android类型转换错误:RelativeLayout无法转为RecyclerView求助
嘿,别再折腾依赖啦!这个错误和你加的maven仓库、raizlabs依赖完全没关系——问题出在布局文件的混淆上。
错误根源
你在onCreate里调用findViewById(R.id.rvTweets),期望拿到一个RecyclerView,但实际上这个ID对应的控件是一个RelativeLayout,强制类型转换自然就报错了。
看你贴的布局代码,这明显是RecyclerView的列表项布局(比如应该叫item_tweet.xml),而不是activity_timeline.xml的内容!你要么把列表项布局当成了Activity的主布局,要么你的activity_timeline.xml里rvTweets这个ID根本就没给RecyclerView,反而给了RelativeLayout。
修复步骤
修正Activity的主布局(activity_timeline.xml)
确保这个布局里包含正确的RecyclerView控件,示例代码如下:<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/rvTweets" android:layout_width="match_parent" android:layout_height="match_parent"/> </androidx.constraintlayout.widget.ConstraintLayout>核心要求:
android:id="@+id/rvTweets"必须属于androidx.recyclerview.widget.RecyclerView控件。把现有RelativeLayout作为列表项布局
将你贴的那个RelativeLayout布局保存为item_tweet.xml,然后在你的TweetsAdapter的onCreateViewHolder方法里加载这个布局,比如:@NonNull @Override public TweetViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_tweet, parent, false); return new TweetViewHolder(view); }移除错误的注解
删掉@SuppressLint("WrongViewCast")——这个注解只是掩盖了警告,并没有解决实际问题,修复布局后这个注解就完全不需要了。
额外提醒
以后要区分清楚:Activity/Fragment的主布局是用来承载页面容器(比如RecyclerView、Toolbar等)的,而RecyclerView的列表项布局是每个条目单独的布局,别把两者搞混啦!
内容的提问来源于stack exchange,提问作者Melanie White

