adapter:
瀑布流:
public class BeautyAdapter extends RecyclerView.Adapter<BeautyAdapter.ViewHolder> {
private ArrayList<BeautyBean> mList;
private Context mContext;
public BeautyAdapter(ArrayList<BeautyBean> mList, Context mContext) {
this.mList = mList;
this.mContext = mContext;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
//如果用到瀑布流 因为需要改里面高度,所以要把ViewGroup放进去 所以就用LayoutInflater就好
// View view = View.inflate(mContext, R.layout.beauty_item, viewGroup);
View view = LayoutInflater.from(mContext).inflate(R.layout.beauty_item, viewGroup, false);
ViewHolder holder = new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
BeautyBean bean = mList.get(i);
ViewGroup.LayoutParams params = viewHolder.itemView.getLayoutParams();
Random random = new Random();
int height = random.nextInt(300) + 300;
params.height = height;
viewHolder.itemView.setLayoutParams(params);
viewHolder.mImage.setImageResource(bean.getImage());
}
@Override
public int getItemCount() {
return mList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private ImageView mImage;
public ViewHolder(@NonNull View itemView) {
super(itemView);
mImage = itemView.findViewById(R.id.Beauty_Image);
}
}
}
多条目:
public class MoreAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements View.OnClickListener {
private ArrayList<BeautyBean> mList;
private final int ONE_ITEM = 1;
private final int TWO_ITEM = 2;
public MoreAdapter(ArrayList<BeautyBean> mList) {
this.mList = mList;
}
//参数2就是布局type类型
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
View view = null;
RecyclerView.ViewHolder holder = null;
switch (viewType) {
case ONE_ITEM:
view = View.inflate(viewGroup.getContext(), R.layout.recy_item_one, null);
holder = new OneHolder(view);
break;
case TWO_ITEM:
view = View.inflate(viewGroup.getContext(), R.layout.recy_item_two, null);
holder = new TwoHolder(view);
break;
}
view.setOnClickListener(this);
return holder;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
BeautyBean bean = mList.get(i);
//判断前一个参数是否是后一个参数的一个实例
if (viewHolder instanceof OneHolder) {
((OneHolder) viewHolder).mName.setText(bean.getName());
// ((OneHolder) viewHolder).itemView.setTag(i);
} else {
((TwoHolder) viewHolder).mImage.setImageResource(bean.getImage());
// ((TwoHolder) viewHolder).itemView.setTag(i);
}
viewHolder.itemView.setTag(i);
}
@Override
public int getItemCount() {
return mList.size();
}
//显示几种布局
@Override
public int getItemViewType(int position) {
if (position % 2 == 1) {
return ONE_ITEM;
} else {
return TWO_ITEM;
}
}
class OneHolder extends RecyclerView.ViewHolder {
private TextView mName;
public OneHolder(@NonNull View itemView) {
super(itemView);
mName = itemView.findViewById(R.id.One_Text);
}
}
class TwoHolder extends RecyclerView.ViewHolder {
private ImageView mImage;
public TwoHolder(@NonNull View itemView) {
super(itemView);
mImage = itemView.findViewById(R.id.Two_Image);
}
}
public interface ItemClick {
void setOnItem(View v, int position);
}
private ItemClick itemClick;
public void setOnItemClick(ItemClick itemClick) {
this.itemClick = itemClick;
}
@Override
public void onClick(View v) {
if (itemClick != null) {
itemClick.setOnItem(v, (int) v.getTag());
}
}
}
列表:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> implements View.OnClickListener {
private ArrayList<String> mList;
public MyAdapter(ArrayList<String> mList) {
this.mList = mList;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = View.inflate(viewGroup.getContext(), R.layout.recy_item, null);
ViewHolder holder = new ViewHolder(view);
view.setOnClickListener(this);
return holder;
}
9
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int position) {
viewHolder.mName.setText(mList.get(position));
viewHolder.itemView.setTag(position);
}
@Override
public int getItemCount() {
return mList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView mName;
public ViewHolder(@NonNull View itemView) {
super(itemView);
mName = itemView.findViewById(R.id.recy_name);
}
}
public interface ItemClick {
void setOnItemClick(View view, int position);
}
private ItemClick mItemClick;
public void setOnClickListener(ItemClick itemClick) {
this.mItemClick = itemClick;
}
@Override
public void onClick(View v) {
if (mItemClick != null) {
mItemClick.setOnItemClick(v, (int) v.getTag());
}
}
}
public class DividerGridItemDecoration extends RecyclerView.ItemDecoration {
private Drawable mDivider;
public DividerGridItemDecoration(Context context) {
mDivider = ContextCompat.getDrawable(context, R.drawable.recycler_divider);
}
@Override
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
drawHorizontal(c, parent);
drawVertical(c, parent);
}
public void drawHorizontal(Canvas c, RecyclerView parent) {
int childCount = parent.getChildCount();
for (int i = 0; i < childCount; i++) {
final View child = parent.getChildAt(i);
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
.getLayoutParams();
final int left = child.getLeft() - params.leftMargin;
final int right = child.getRight() + params.rightMargin
+ mDivider.getIntrinsicWidth();
final int top = child.getBottom() + params.bottomMargin;
final int bottom = top + mDivider.getIntrinsicHeight();
mDivider.setBounds(left, top, right, bottom);
mDivider.draw(c);
}
}
public void drawVertical(Canvas c, RecyclerView parent) {
final int childCount = parent.getChildCount();
for (int i = 0; i < childCount; i++) {
final View child = parent.getChildAt(i);
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
.getLayoutParams();
final int top = child.getTop() - params.topMargin;
final int bottom = child.getBottom() + params.bottomMargin;
final int left = child.getRight() + params.rightMargin;
final int right = left + mDivider.getIntrinsicWidth();
mDivider.setBounds(left, top, right, bottom);
mDivider.draw(c);
}
}
@Override
public void getItemOffsets(Rect outRect, int itemPosition,
RecyclerView parent) {
outRect.set(0, 0, mDivider.getIntrinsicWidth(),
mDivider.getIntrinsicHeight());
}
}
public class StaggDemoActivity extends AppCompatActivity {
private RecyclerView mRecy;
private ArrayList<BeautyBean> mList = new ArrayList<>();
private int[] mImages = {R.mipmap.meinv, R.mipmap.xingan, R.mipmap.meizi};
private BeautyAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_stagg_demo);
initViews();
initData();
mAdapter = new BeautyAdapter(mList, this);
mRecy.setAdapter(mAdapter);
}
private void initViews() {
mRecy = findViewById(R.id.Stagg_Recy);
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
mRecy.setLayoutManager(staggeredGridLayoutManager);
//这个地方是默认加上的
mRecy.setItemAnimator(new DefaultItemAnimator());
}
private void initData() {
for (int i = 0; i < 20; i++) {
mList.add(new BeautyBean("么么哒" + i, mImages[i % mImages.length]));
}
}
}
public class MoreItemDemoActivity extends AppCompatActivity {
private ArrayList<BeautyBean> mList = new ArrayList<>();
private RecyclerView mRecy;
private MoreAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_grid_demo);
initViews();
initData();
mAdapter = new MoreAdapter(mList);
mRecy.setAdapter(mAdapter);
mAdapter.setOnItemClick(new MoreAdapter.ItemClick() {
@Override
public void setOnItem(View v, int position) {
Toast.makeText(MoreItemDemoActivity.this, mList.get(position).getName() + "", Toast.LENGTH_SHORT).show();
}
});
}
private void initData() {
for (int i = 0; i < 20; i++) {
mList.add(new BeautyBean("翟萍萍丑八怪" + i, R.mipmap.xingan));
}
}
private void initViews() {
mRecy = findViewById(R.id.More_Recy);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
mRecy.setLayoutManager(layoutManager);
}
}
public class LinearDemoActivity extends AppCompatActivity {
private RecyclerView mRecy;
private ArrayList<String> mList = new ArrayList<>();
private MyAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_linear_demo);
initViews();
mAdapter = new MyAdapter(mList);
mRecy.setAdapter(mAdapter);
initData();
mAdapter.setOnClickListener(new MyAdapter.ItemClick() {
@Override
public void setOnItemClick(View view, int position) {
Toast.makeText(LinearDemoActivity.this, mList.get(position), Toast.LENGTH_SHORT).show();
}
});
}
private void initData() {
for (int i = 0; i < 20; i++) {
mList.add("吕真帅" + i);
}
mAdapter.notifyDataSetChanged();
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void initViews() {
mRecy = findViewById(R.id.Recy);
//得让这个RecyclerView显示样式
GridLayoutManager layoutManager = new GridLayoutManager(this,3);
DividerGridItemDecoration divider = new DividerGridItemDecoration(this);
mRecy.addItemDecoration(divider);
//这是自带的分割线 可以添加两把一个设置水平一个设置垂直
// DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL);
// dividerItemDecoration.setDrawable(getDrawable(R.drawable.recycler_divider));
// mRecy.addItemDecoration(dividerItemDecoration);
mRecy.setLayoutManager(layoutManager);
}
}
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private RecyclerView mRecy;
private ArrayList<String> mList = new ArrayList<>();
private MyAdapter mAdapter;
private Button Liner_Btn;
private Button Grid_Btn;
private Button Stagg_Btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
Liner_Btn = (Button) findViewById(R.id.Liner_Btn);
Grid_Btn = (Button) findViewById(R.id.Grid_Btn);
Stagg_Btn = (Button) findViewById(R.id.Stagg_Btn);
Liner_Btn.setOnClickListener(this);
Grid_Btn.setOnClickListener(this);
Stagg_Btn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.Liner_Btn:
startActivity(new Intent(MainActivity.this, LinearDemoActivity.class));
break;
case R.id.Grid_Btn:
startActivity(new Intent(MainActivity.this, MoreItemDemoActivity.class));
break;
case R.id.Stagg_Btn:
startActivity(new Intent(MainActivity.this, StaggDemoActivity.class));
break;
}
}