我一直关注制作RecyclerView
的{{3}}指南,但我遇到了障碍。它提供的代码不是很清楚,但在构建自定义Recyclerview.Adpater
时,它有这个方法:
@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
// create a new view
TextView v = (TextView) LayoutInflater.from(parent.getContext())
.inflate(R.layout.my_text_view, parent, false);
// set the view's size, margins, paddings and layout parameters
...
ViewHolder vh = new ViewHolder(v);
return vh;
}
现在,我似乎无法弄清R.layout.my_text_view
来自哪里。他们没有在布局文件中指定它。所以,当我试图将该代码放入我的适配器时,它告诉我没有找到该符号。所以,我将其添加为我的TextView
:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_recycle"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".recycle.RecycleActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".recycle.RecycleActivity"/>
<include
layout="@layout/toolbar_main"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/my_text_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
但我仍然无法在my_text_view
中使用R.layout.my_text_view
,因为它仍无法找到它。我还尝试了可以找到的R.id.my_text_view
,但它说它需要布局,而不是ID。所以我尝试使用R.layout.activity_recycle
这样:
@Override
public RecycleViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
// create a new view
TextView v = (TextView) LayoutInflater.from(parent.getContext())
.inflate(R.layout.activity_recycle, parent, false);
// set the view's size, margins, paddings and layout parameters
return new ViewHolder(v);
}
但这没有用,我得到了例外:
java.lang.ClassCastException:android.widget.RelativeLayout无法强制转换为android.widget.TextView
我错过了什么?这个神秘的my_text_view
来自哪里,我该如何使用它?
答案 0 :(得分:2)
基本上,当使用RecyclerView.Adapter onCreateViewHolder时,它会将viewholder返回到列表项的视图。 ViewHolder用于在RecyclerView中膨胀单个列表项(或行)。
您应该为要添加到RecyclerView的列表项创建布局。 例如 R.layout.my_text_view应仅包含此TextView:
<TextView
android:id="@+id/my_text_view_detail"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
现在您可以使用与上面相同的其余代码。
答案 1 :(得分:0)
你正在做的错误是你试图给RelativeLayout里面的TextView充气。相反,首先要对整个布局进行充气,并尝试找出布局内可用的子视图。
例如,您的布局为item_recycle_layout.xml
,首先将其展开并将其展开到View
或直接投放到RelativeLayout
,因为布局中的父布局是标识为{{1}的RelativeLayout }。
例如,您的项目布局为:
activity_recycle
现在下面的代码应该在您的适配器中:
<RelativeLayout
.....
..... >
<TextView
android:id="@+id/my_text_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>