Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么我们需要RecyclerView上的ViewGroup参数?_Android_Android Adapter_Android Recyclerview - Fatal编程技术网

Android 为什么我们需要RecyclerView上的ViewGroup参数?

Android 为什么我们需要RecyclerView上的ViewGroup参数?,android,android-adapter,android-recyclerview,Android,Android Adapter,Android Recyclerview,我在RecyclerView工作,我有以下方法: // Create new views (invoked by the layout manager) @Override public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { // create a ne

我在RecyclerView工作,我有以下方法:

 // 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(v);
        return vh;
    }
我需要清楚地解释这个参数
parent
我们为什么要使用它,以及它的用途是什么???

根据

视图组是一种特殊视图,可以包含其他视图(称为 视图组是布局和视图的基类 容器。此类还定义了ViewGroup.LayoutParams类 作为布局参数的基类

ViewGroup
是一个不可见的容器,它既可以容纳
View
s,也可以容纳
ViewGroup
s。例如:LinearLayout是包含按钮(视图)和其他布局的视图组

onCreateViewHolder()
中的
ViewGroup
的目的是当
RecyclerView
中的项目需要表示特定的
ViewGroup
时。为此,您可以手动创建新视图,也可以从XML布局文件将其膨胀。正如在代码中一样,您正在从xml膨胀:

View v = LayoutInflater.from(parent.getContext())
                           .inflate(R.layout.my_text_view, parent, false);

新的ViewHolder将用于稍后使用
onBindViewHolder()
显示适配器的项目

你真正应该问的问题是:

膨胀视图时,为什么需要传入父视图

当您创建了
my_text\u view
布局时,它可能有一些类似以下内容的XML:

<TextView
    android:id="@+id/text_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    android:layout_marginBottom="10dp"
    />
但是,如果您这样做,那么您在XML中指定的任何
布局
属性都将被丢弃。这可能会导致您的布局与预期的不同

为什么我们使用parent.getContext()而不是活动上下文

您可以使用活动上下文,大多数情况下,它不会产生任何影响。父级很可能从活动继承了其
上下文


但是,也可能是父视图修改了上下文,例如为其指定了不同的主题。

正如您在充气()中看到的,这意味着返回的视图与该父视图没有关联!!请再给我一张纸条!为什么我们使用parent.getContext()而不是将活动上下文作为ListView传递?我搜索了parent参数,发现RecyclerView总是将自身作为父视图传递,这解释了LayoutParams在这种上下文中的含义,膨胀的布局将采用RecyclerView的LayoutParams,这是真的吗?膨胀的布局将使用RecyclerView(父级)提供的值(宽度、高度等)来计算其布局参数。关于上下文的其他说明,您说视图上下文和活动上下文之间没有区别,我参考了android文档,视图不继承上下文类,所以有不同的权限<代码>视图
不继承
上下文
。但是,
视图
类将
上下文
作为其成员变量之一。这是在其构造函数中设置的,通常是活动上下文
LayoutInflater
    .from(parent.getContext())
    .inflate(R.layout.my_text_view, null);