我正在尝试按照Android官方文档创建列表和卡片.
在页面的第三个(从顶部)代码示例中,有一个关于如何实现的示例,MyAdapter它提供对数据集中项目的访问,为项目创建视图,并在它们不再可见时替换它们.
问题是,在onCreateViewHolder他们通过v这是一个View到ViewHolder其之前只是执行.ViewHolder期望的构造函数a TextView.Android Studio 1.0比喊叫:
android.widget.textview cannot be applied to android.view.view
Run Code Online (Sandbox Code Playgroud)
怎么了?
Kel*_*dos 20
这是新RecyclerView模式.在其中,您使用3个组件:
ViewHolder扩展RecyclerView.ViewHolder的对象.在其中,您可以定义View字段和一个接受View v作为参数的构造函数.在此构造函数中,使用v.findViewById()绑定所有这些视图
onCreateViewHolder()做两件事 - 首先你从布局中膨胀一个View对象.然后创建一个ViewHolder(您在上面定义的一个),并将此膨胀的View作为参数传递.
最后,onBindViewHolder()传递一个ViewHolder对象,在该对象中将内容放入第一个中定义的所有字段中,并在第三步中绑定.
至于你提到的例子,有一个错误.该onCreateViewHolder()方法应如下所示:
// Create new views (invoked by the layout manager)
@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
// create a new view
View v = 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((TextView)v); //You need a cast here
return vh;
}
Run Code Online (Sandbox Code Playgroud)
或者ViewHolder应该定义一个期望View对象的构造函数(这实际上更正确):
public static class ViewHolder extends RecyclerView.ViewHolder {
// each data item is just a string in this case
public TextView mTextView;
public ViewHolder(View v) {
mTextView = (TextView) v.findViewById(/* some ID */);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6963 次 |
| 最近记录: |