android.widget.textview无法应用于android.view.view

use*_*863 12 android

我正在尝试按照Android官方文档创建列表和卡片.

在页面的第三个(从顶部)代码示例中,有一个关于如何实现的示例,MyAdapter它提供对数据集中项目的访问,为项目创建视图,并在它们不再可见时替换它们.

问题是,在onCreateViewHolder他们通过v这是一个ViewViewHolder其之前只是执行.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)