Java ClassCastException和Google示例代码:我的my_text_view.xml文件应该是什么样子?
我一直在尝试学习如何使用Java ClassCastException和Google示例代码:我的my_text_view.xml文件应该是什么样子?,java,android,Java,Android,我一直在尝试学习如何使用RecyclerView,但我一直在使用onCreateViewHolder方法时遇到错误。我怀疑我的my_text_view.xml格式不正确。谷歌的文档没有提供一个示例XML文件供我使用 下面是adapter类(直接取自Google教程),以及它下面的XML文件: 公共类MyAdapter扩展了RecyclerView.Adapter{ 私有字符串[]mDataset; //提供对每个数据项的视图的引用 //复杂数据项可能需要每个项有多个视图,并且 //您可以访问视图
RecyclerView
,但我一直在使用onCreateViewHolder
方法时遇到错误。我怀疑我的my_text_view.xml
格式不正确。谷歌的文档没有提供一个示例XML文件供我使用
下面是adapter类(直接取自Google教程),以及它下面的XML文件:
公共类MyAdapter扩展了RecyclerView.Adapter{
私有字符串[]mDataset;
//提供对每个数据项的视图的引用
//复杂数据项可能需要每个项有多个视图,并且
//您可以访问视图持有者中数据项的所有视图
公共静态类MyViewHolder扩展了RecyclerView.ViewHolder{
//在本例中,每个数据项只是一个字符串
公共文本视图文本视图;
公共MyViewHolder(文本视图v){
超级(五);
textView=v;
}
}
//提供合适的构造函数(取决于数据集的类型)
公共MyAdapter(字符串[]myDataset){
mDataset=myDataset;
}
@凌驾
public MyAdapter.MyViewHolder onCreateViewHolder(视图组父级,
int视图类型){
//创建新视图
TextView v=(TextView)LayoutInflater.from(parent.getContext())
.inflate(R.layout.my_text_view,parent,false);//此行抛出ClassCastException
MyViewHolder vh=新的MyViewHolder(v);
返回vh;
}
//替换视图的内容(由布局管理器调用)
@凌驾
公共无效onBindViewHolder(MyViewHolder,int位置){
//-在此位置从数据集中获取元素
//-用该元素替换视图的内容
holder.textView.setText(mDataset[position]);
}
//返回数据集的大小(由布局管理器调用)
@凌驾
public int getItemCount(){
返回mDataset.length;
}
}
以及my\u text\u view.xml
的内容:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="TextView" />
</LinearLayout>
XML文件的根视图是
LinearLayout
,但代码将其膨胀,然后试图将其转换为文本视图
您可以从xml中删除LinearLayout,使其如下所示:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="TextView" />
在您的视窗夹中:
textView = v.findViewById(R.id.text);
如果你有计划的话,我建议你选择第二种选择
以后修改此选项,因为您无法向viewholder添加更多项目,如果
你选择第一个解决方案。否则它会再次崩溃
XML文件的根视图是
LinearLayout
,但代码将其膨胀,然后试图将其转换为文本视图
您可以从xml中删除LinearLayout,使其如下所示:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="TextView" />
在您的视窗夹中:
textView = v.findViewById(R.id.text);
如果你有计划的话,我建议你选择第二种选择
以后修改此选项,因为您无法向viewholder添加更多项目,如果
你选择第一个解决方案。否则它会再次崩溃
xml中的根布局是
linearLayout
您应该使用findViewById()
在viewHolder类中查找TextView
子级:
试试这个:
public static class MyViewHolder extends RecyclerView.ViewHolder {
// each data item is just a string in this case
public TextView textView;
public MyViewHolder(View v) {
super(v);
textView = v.findViewById(R.id.text);
}
}
xml中的根布局是
linearLayout
您应该使用findViewById()
在viewHolder类中查找TextView
子级:
试试这个:
public static class MyViewHolder extends RecyclerView.ViewHolder {
// each data item is just a string in this case
public TextView textView;
public MyViewHolder(View v) {
super(v);
textView = v.findViewById(R.id.text);
}
}
@mperic,我绝对会走这条路,因为你将创建具有多个UI片段甚至多个视图持有者的RecyclerViews,所以你应该习惯这个概念。@mperic,我绝对会走这条路,因为你将创建具有多个UI片段甚至多个视图持有者的RecyclerViews,所以你应该习惯这个概念。