RecyclerViewに精通しています.ListView、GridView、滝の流れを作ります.分割線を追加し、動画を削除し、Itemクリックイベントを追加します.
14146 ワード
転載は出典を明記してください.http://blog.csdn.net/linglongxin24/article/details/53126706 この記事は「DylanAndroidのブログ」から来ています.
RecyclerViewに精通しています.ListView、GridView、滝の流れを作ります.分割線を追加し、動画を削除し、Itemクリックイベントを追加します.
前のAndroidでRecyclerViewのトレーナーの真似美団の分類インターフェイスでRecyclerViewの基本的な使い方を書きました.今日はここでRecyclerViewの完全な使い方をもう一度勉強したいです.普通のListViewと横のListViewをどうやって作るか、普通のGridViewと横のGridView、どうやって分割線を追加するか、そして追加と削除の動画、そしてItemのOnClickイベントのモニターを設定するかを含む.ここにはいろいろな使い方が含まれています.入門の使い方として、すでにマスターしている方はご遠慮ください.
まず全体の効果図を見ます.
一.RecyclerViewの紹介
RecyclerViewはAndroid Lバージョンに新しく追加されたListViewおよびGridViewに代わるSDKであり、その柔軟性はListViewよりも優れています.次に一連の内容を通して、RecyclerViewの使い方を説明します.ListViewとGridViewを徹底的に捨てます.
二.RecyclerViewアーキテクチャ
三.RecyclerViewのメリット 1.RecyclerViewはView Holderの回収多重をパッケージ化しています.つまりRecyclerViewは標準化されています.AdapterはView Holderに向かっています.多重化されたロジックはパッケージ化されています.書くのがもっと簡単です. .挿抜式の体験を提供しています.高さの結合、非常に柔軟で、Itemの表示RecyclerViewに対して、専用に該当するクラスを抽出して、Itemの表示を制御して、その拡張性を非常に強くします.例えば、横方向や縦方向のスライドリストの効果をコントロールしたいなら、Linear LayoutManagerなどで制御できます.すなわち、RecyclerViewはListViewのラインにこだわらず、滝の流れに対応したStage GredGrade LayoutManagerなどがあります.Itemの分離線を制御したいのですが、RecyclerViewのItem Decorationという種類を継承して、自分の業務ニーズに対してコードを書き表してもいいです. .Itemの添削をコントロールできるアニメーションは、Item Animtorというカテゴリーによってコントロールできます.もちろん、添削された動画に対しては、RecyclerViewは自分のデフォルトがあります. 四.RecyclerView 3部作実現第一歩:レイアウトマネージャを設定して、各アイテムがどのように配置されているかを判定するために使用する. Liear LayoutManagerはListViewの効果 に相当します. GridLayoutManagerはGridViewに相当する効果 です. Stagg eredGredLayoutManagerの滝の流れ
第二ステップ:分割線を追加し、インターネット上に流れる万能分割線Divider Item DecorationとDivider GridItem Decorationを使用して、まずstyle.xmlに分割線画像を定義します.1.まずdrawableにdivider.xml を新規作成します.第3ステップ:アダプタを設定する 1.縦向きのListView .横向きのListView .たてのGridView .横のGridView .垂直な滝の流れ .アニメーションの追加と削除
RecyclerViewに精通しています.ListView、GridView、滝の流れを作ります.分割線を追加し、動画を削除し、Itemクリックイベントを追加します.
前のAndroidでRecyclerViewのトレーナーの真似美団の分類インターフェイスでRecyclerViewの基本的な使い方を書きました.今日はここでRecyclerViewの完全な使い方をもう一度勉強したいです.普通のListViewと横のListViewをどうやって作るか、普通のGridViewと横のGridView、どうやって分割線を追加するか、そして追加と削除の動画、そしてItemのOnClickイベントのモニターを設定するかを含む.ここにはいろいろな使い方が含まれています.入門の使い方として、すでにマスターしている方はご遠慮ください.
まず全体の効果図を見ます.
一.RecyclerViewの紹介
RecyclerViewはAndroid Lバージョンに新しく追加されたListViewおよびGridViewに代わるSDKであり、その柔軟性はListViewよりも優れています.次に一連の内容を通して、RecyclerViewの使い方を説明します.ListViewとGridViewを徹底的に捨てます.
二.RecyclerViewアーキテクチャ
三.RecyclerViewのメリット
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<solid android:color="@color/colorAccent"/>
<size android:height="1dp" android:width="1dp"/>
</shape>
2. style.xml android:listDivider
<item name="android:listDivider">@drawable/divider</item>
package cn.bluemobi.dylan.recyclerviewdemo2;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
/** * RecyclerView * Created by yuandl on 2016-11-01. */
public class RvAdapter extends RecyclerView.Adapter<RvAdapter.MyViewHolder> {
private Context context;
private List<Integer> datas;
/** * item */
private OnItemClickListener onItemClickListener;
/** * item */
private List<Integer> heights = new ArrayList<>();
/** * item * * @param type */
private int type = 0;
public RvAdapter(Context context, List<Integer> datas) {
this.context = context;
this.datas = datas;
for (int i : datas) {
int height = (int) (Math.random() * 100 + 300);
heights.add(height);
}
}
public void setType(int type) {
this.type = type;
}
/** * * * @param onItemClickListener */
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View contentView = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
MyViewHolder viewHolder = new MyViewHolder(contentView);
return viewHolder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {
RecyclerView.LayoutParams layoutParams;
if (type == 0) {
layoutParams = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
} else if (type == 1) {
layoutParams = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
} else {
layoutParams = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, heights.get(position));
layoutParams.setMargins(2, 2, 2, 2);
}
holder.itemView.setLayoutParams(layoutParams);
holder.imageView.setImageResource(datas.get(position));
holder.tv.setText(" " + position);
/** item **/
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (onItemClickListener != null) {
onItemClickListener.onItemClickListener(position, datas.get(position));
}
}
});
}
@Override
public int getItemCount() {
return datas == null ? 0 : datas.size();
}
/** * ViewHolder */
public class MyViewHolder extends RecyclerView.ViewHolder {
private ImageView imageView;
public TextView tv;
public MyViewHolder(View itemView) {
super(itemView);
imageView = (ImageView) itemView.findViewById(R.id.iv);
tv = (TextView) itemView.findViewById(R.id.tv);
}
}
/** * item */
public interface OnItemClickListener {
void onItemClickListener(int position, Integer data);
}
}
五.さまざまな効果を作り出す rv.setBackgroundColor(Color.TRANSPARENT);
rv.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
rvAdapter.setType(0);
rv.removeItemDecoration(itemDecoration);
rv.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));
itemDecoration = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST);
rv.addItemDecoration(itemDecoration);
rvAdapter.setType(1);
rv.removeItemDecoration(itemDecoration);
rv.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT));
rv.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
itemDecoration = new DividerItemDecoration(this, DividerItemDecoration.HORIZONTAL_LIST);
rv.addItemDecoration(itemDecoration);
rvAdapter.setType(1);
rv.setBackgroundColor(Color.TRANSPARENT);
rv.removeItemDecoration(itemDecoration);
rv.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));
rv.setLayoutManager(new GridLayoutManager(this, 5));
itemDecoration = new DividerGridItemDecoration(this);
rv.addItemDecoration(itemDecoration);
rvAdapter.setType(1);
rv.setBackgroundColor(Color.TRANSPARENT);
rv.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT));
rv.removeItemDecoration(itemDecoration);
rv.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.HORIZONTAL));
itemDecoration = new DividerGridItemDecoration(this);
rv.addItemDecoration(itemDecoration);
rvAdapter.setType(3);
rv.setBackgroundColor(getResources().getColor(R.color.colorAccent));
rv.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));
rv.removeItemDecoration(itemDecoration);
rv.setLayoutManager(new StaggeredGridLayoutManager(5, StaggeredGridLayoutManager.VERTICAL));
/** **/
rvAdapter.notifyItemInserted(1);
/** **/
rvAdapter.notifyItemRemoved(1);
六.GiHub