1

私はちょうどMaster/Detail Flowプロジェクトを生成しました。私はDriverListActivity.javaの中でViewHolderというサブクラスにfinalという属性を持っています。 ViewHolder内のデータがおそらく置き換えられることになるので、 属性がfinalとして設定されているのはなぜですか?ViewHolderクラスの最終属性は?

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() + "'"; 
    } 
} 

答えて

1

最終的には、オブジェクトを変更することはできません。最終的に、参照自体を置き換えることはできません。最終参照でmIdView.setText()を呼び出すことはできます。

Cのように考えてください。ポインタ(参照)と値があります。最終的には、ポインターが指している値ではなくポインタが変更できないことを意味します。そして、ViewHolderは一度作成されたビューの値を変更しません。これがViewHolderパターンを使用する理由です。これらの参照は定数です。

0

RecyclerViewは、限定的な量の特定のViewHolderを作成しようとしています。例えば、あなたのデータセットに100個の同様のアイテムがある場合、ではなくという意味で、が作成されます。画面のビューポートを埋めるために必要なもの、つまり10個のアイテムを大量に持っています。ViewHolderです。

今すぐスクロールすると、画面の外に出ている最初のアイテムのViewHolderがリサイクルされ、onBindViewHolder()に返され、アイテムの表示を設定します画面は下から(縦がRecyclerViewと仮定します)。 onBindViewHolder()

は、あなたがやろうとしているすべてはあなたのニーズ、例えばに従ってフィールドを変異さ:

holder.titleTextView.setText(dataSet.get(position)); 

は、ここholder.titleTextViewの参照を変更する必要を参照してくださいしない、唯一の変異は、それが簡単にできるので、たまたまfinalと宣言してください。

0

エンティティを定義するために、最終的なキーワードが複数の異なるコンテキストで使用されます。

最後の変数が割り当てられると、常に同じ の値が含まれます。最終変数がオブジェクトへの参照を保持している場合、オブジェクトの操作によってオブジェクトの の状態が変更される可能性がありますが、 変数は常に同じオブジェクトを参照します( finalのこのプロパティはnon-transitivityと呼ばれます) 。配列がオブジェクトであるため、これは配列 にも適用されます。最終的な変数が配列 への参照を保持している場合、配列の要素は 操作によって変更される可能性がありますが、変数は常に 同じ配列を参照します。

関連する問題