Android RecyclerView基礎知識詳細


今週のGoogle I/O大会はAndroidに関する人々の奮い立つニュースをたくさん持ってきました。Android Lが導入した新しいものを消化するには長い時間が必要かもしれません。
最近はRecyclerViewを研究しています。ここで皆さんに今までの成果を分かち合いたいです。
RecyclerViewは何ですか?
RecyclerViewは、アダプターベースのビューに対しても同様のレンダリング方式を提供することを目的とする新しいビューグループである。これはListViewとGridViewコントロールの後継者として、最新のsupport-V 7バージョンでサポートされています。
RecyclerViewを開発する際には、拡張性を十分に考慮していますので、任意の種類のレイアウトを作成することができます。でも、使う上ではちょっと不便です。これはAndroidです。一つのことをやり遂げるのはそんなに簡単ではありません。
RecyclerViewを使うなら、以下の3つの要素を理解する必要があります。
  • RecyclerView.Adapter
  • LayoutManager
  • Item Animator
  • RecyclerView.Adapter
    RecyclerViewは新しいアダプターを含んでいます。今使っているアダプターと似ていますが、例えばView Holderを使う必要があります。2つの主要な方法を書き換える必要があります。一つはビューとその所有者を表示するために、もう一つはデータをビューに結びつけるために使います。このようにするメリットは、最初の方法は本当に新しいビューを作成する必要がある時にのみ呼び出されます。回収されたかどうかを確認する必要はありません。
    
    ; html-script: false ]
    public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.ViewHolder> {
    
      private List<ViewModel> items;
      private int itemLayout;
    
      public MyRecyclerAdapter(List<ViewModel> items, int itemLayout) {
        this.items = items;
        this.itemLayout = itemLayout;
      }
    
      @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(itemLayout, parent, false);
        return new ViewHolder(v);
      }
    
      @Override public void onBindViewHolder(ViewHolder holder, int position) {
        ViewModel item = items.get(position);
        holder.text.setText(item.getText());
        holder.image.setImageBitmap(null);
        Picasso.with(holder.image.getContext()).cancelRequest(holder.image);
        Picasso.with(holder.image.getContext()).load(item.getImage()).into(holder.image);
        holder.itemView.setTag(item);
      }
    
      @Override public int getItemCount() {
        return items.size();
      }
    
      public static class ViewHolder extends RecyclerView.ViewHolder {
        public ImageView image;
        public TextView text;
    
        public ViewHolder(View itemView) {
          super(itemView);
          image = (ImageView) itemView.findViewById(R.id.image);
          text = (TextView) itemView.findViewById(R.id.text);
        }
      }
    }
    
    
    これは簡単なアダプターですが、事情がだんだん複雑になり始めました。RecyclerViewの中には、Onitem ClickListenerの方法がありません。だからアダプターはイベントを処理するために良い候補者です。
    アダプターから項目を追加または削除するには、アダプターに明確な通知が必要です。これは前のnotifyData SetChanged()とはちょっと違っています。
    
    ; html-script: false ]
    public void add(ViewModel item, int position) {
      items.add(position, item);
      notifyItemInserted(position);
    }
    
    public void remove(ViewModel item) {
      int position = items.indexOf(item);
      items.remove(position);
      notifyItemRemoved(position);
    }
    
    
    LayoutManager
    このような決定的なビューは画面のどの位置に置かれていますか?スクロールとリサイクルを管理できます。
    LayoutManagerはLinerear LayoutManagerという実現カテゴリしかありません。1500行以上のコードがあります。しかし、この点からは複雑さがわかる。マネージャは、リストビュー(横と縦を含む)をシミュレートしますが、ヘッダーとページの最後がありません。
    LayoutManagerのためのサブクラスを作成するには、新米にはあまり向いていません。私たちはコミュニティによってRecyclerViewの潜在力を発掘する必要があります。この例と一緒に、GridViewコントロールの実装を短時間でアップロードします。
    この背後にある鍵は、Linear LayoutManagerのコードをまねてBaselayoutManagerを作成し、それに基づいて拡張することだと思います。support-v 7の最終バージョンはより多く、より良い実現を提供するかもしれません。
    Itemアニメイト
    ItemAnimtorは、アダプターからのお知らせにより、動画表示グループの変更を行います。基本的には、項目の追加と削除が自動的に表示されます。これは簡単なクラスではないですが、DefaultItem Animerはもう十分に実行できます。
    RecyclerView設定
    最後に、RecyclerViewを初期化するには、このようなことが必要です。
    
    ; html-script: false ]
    RecyclerView recyclerView = (RecyclerView) findViewById(R.id.list);
    recyclerView.setHasFixedSize(true);
    recyclerView.setAdapter(new MyRecyclerAdapter(createMockList(), R.layout.item));
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    
    setHas FixedSize()メソッドはRecyclerViewを固定サイズに維持するために使用され、この情報は自身の最適化に使用される。
    締め括りをつける
    RecyclerViewは確かに強力なビューであり、開発者に無限の拡張能力を提供しています。曲線の学習は非常に険しいかもしれません。しかし、Android社区では、すぐにLayoutManagerの素晴らしい実現が発表されると信じています。
    私はgithub倉庫を作っています。そこでこの例を見つけることができます。これは私が計画した拡張ライブラリの基礎です。GridViewの実現をテストできます。様々な形のフィードバックを歓迎します。

    以上はAndroid RecyclerViewの基礎資料について詳しく説明しました。引き続き関連資料を補充します。ありがとうございます。