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

时间:2014-12-12 19:17:00

标签: android

我试图关注Creating Lists and Cards的Android官方文档。

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

问题是,在onCreateViewHolder上,他们将v View传递给ViewHolder,而ViewHolder就是在此之前实施的。 TextView的构造函数需要android.widget.textview cannot be applied to android.view.view 。 Android Studio 1.0比喊:

{{1}}

出了什么问题?

2 个答案:

答案 0 :(得分:20)

这是新的RecyclerView模式。在其中,您使用3个组件:

扩展RecyclerView.ViewHolder的

ViewHolder对象。在其中,您可以定义View字段和一个接受View v作为参数的构造函数。在此构造函数中,使用v.findViewById()绑定所有这些视图

onCreateViewHolder()做两件事 - 首先从布局中膨胀View对象。然后创建一个ViewHolder(您在上面定义的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;
}

或者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 */);
    }
}

答案 1 :(得分:0)

我也遇到了同样的错误,我可以通过遵循kelevandos指令并确保布局文件仅包含TextView来解决。

<?xml version="1.0" encoding="utf-8"?>


    <TextView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/text1"

        android:layout_alignParentTop="true"
        android:textSize="20sp"
        />