Java ViewHolder类中的最终属性?
我刚刚生成了一个Java ViewHolder类中的最终属性?,java,android,android-recyclerview,android-view,android-viewholder,Java,Android,Android Recyclerview,Android View,Android Viewholder,我刚刚生成了一个Master/detailflow项目,我发现了一些奇怪的东西:在driverstactivity.java中,名为ViewHolder的子类具有final属性。由于ViewHolder中的数据可能需要更换, 为什么属性设置为final public class ViewHolder extends RecyclerView.ViewHolder { public final View mView; //??????? public final TextView
Master/detailflow
项目,我发现了一些奇怪的东西:在driverstactivity.java
中,名为ViewHolder
的子类具有final
属性。由于ViewHolder
中的数据可能需要更换,
为什么属性设置为final
public class ViewHolder extends RecyclerView.ViewHolder {
public final View mView; //???????
public final TextView mIdView; //???????
public final TextView mContentView; //???????
public DummyContent.DummyItem mItem;
//CONSTRUCTOR
public ViewHolder(View view) {
super(view);
mView = view;
mIdView = (TextView) view.findViewById(R.id.id);
mContentView = (TextView) view.findViewById(R.id.content);
}
@Override
public String toString() {
return super.toString() + " '" + mContentView.getText() + "'";
}
}
Final并不意味着对象不能被变异。Final表示引用本身不能被替换。您仍然可以对最终引用调用mIdView.setText()
就像在C中一样,有一个指针(一个引用)和一个值。Final表示指针是不可更改的,而不是它所指向的值。一旦创建,ViewHolder将不会更改其内部视图的值-这就是我们使用ViewHolder模式的原因-这些引用是恒定的。
RecyclerView
将创建数量有限的特定ViewHolder
。例如,在您的数据集中有100个类似的项目并不意味着您将创建100个ViewHolder
s。要填充屏幕视口,大约需要多少ViewHolder
s,比如说10个项目
现在,只要您滚动,屏幕外的第一个项目的ViewHolder
将被回收并返回给onBindViewHolder()
,以便为项目设置视图,该项目将从底部进入屏幕(假设我们有一个垂直的RecyclerView
)
在onBindViewHolder()
中,您要做的就是根据您的需要更改字段,例如:
holder.titleTextView.setText(dataSet.get(position));
如图所示,无需更改holder.titleTextView的引用,仅发生变异,因此可以轻松声明为final
最后一个关键字在几个不同的上下文中用于定义
只能分配一次的实体
一旦分配了最终变量,它总是包含相同的变量
价值如果最终变量包含对对象的引用,则
对象的状态可以通过对对象的操作来更改,但是
变量将始终引用同一对象(的此属性
final称为非及物性(non-transitivity)。这也适用于阵列,
因为数组是对象;如果最终变量包含对的引用
一个数组,则可以通过
操作,但变量将始终引用
相同的数组