软件编程
位置:首页>> 软件编程>> Android编程>> Android RecyclerView详解及简单实例

Android RecyclerView详解及简单实例

作者:lqh  发布时间:2023-03-06 21:31:29 

标签:Android,RecyclerView

Android  RecyclerView

小白今天第一次接触RecyclerView,前辈大神告诉我这是一个很神奇的控件,一看就是一整天。

RecyclerView中有规定好的方法去显示列表,图片甚至视频。还带有删除新建某一列表的方法。相对于ListView这个
RecyclerView控件就更加牛了。

明白的大神看一眼就懂,小白可以自己照源码敲一遍看看效果。这段程序是把A-Z按列排列下来:


package com.example.osserver.recycler;

import android.app.Activity;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.*;
import android.support.v7.widget.LinearLayoutManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends ActionBarActivity {

private RecyclerView mRecyclerView;
 private List<String> mDatas;
 private HomeAdapter mAdapter;

@Override
 protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
   initData();
   mRecyclerView = (RecyclerView)findViewById(R.id.id_recyclerview);
   mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
   mRecyclerView.setAdapter(mAdapter = new HomeAdapter());
   mRecyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.HORIZONTAL_LIST));

}

private void initData() {
       mDatas = new ArrayList<String>();
       for (int i ='A';i<='Z';i++){
         mDatas.add(""+(char)i);
   }
 }
class HomeAdapter extends RecyclerView.Adapter<MyViewHolder>
{
 @Override
 public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
   MyViewHolder holder = new MyViewHolder(LayoutInflater.from(MainActivity.this).inflate(R.layout.item,parent,false));
   return holder;
 }

@Override
 public void onBindViewHolder(MyViewHolder holder, int position) {
   holder.tv.setText(mDatas.get(position));

}

@Override
 public int getItemCount() {
   return mDatas.size();
 }
}

class MyViewHolder extends RecyclerView.ViewHolder
 {
   TextView tv;
   public MyViewHolder(View view) {
     super(view);
     tv = (TextView)view.findViewById(R.id.id_num);
   }
 }

}

接下来就是列表的润色部分:

今天我也只是进行到了这一步,踩了好多坑。


package com.zhy.sample.demo_recyclerview;

/*
* Copyright (C) 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* limitations under the License.
*/

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.State;
import android.util.Log;
import android.view.View;

/**
* This class is from the v7 samples of the Android SDK. It's not by me!
* <p/>
* See the license above for details.
*/
public class DividerItemDecoration extends RecyclerView.ItemDecoration {

private static final int[] ATTRS = new int[]{
     android.R.attr.listDivider
 };

public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL;

public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL;

private Drawable mDivider;

private int mOrientation;

public DividerItemDecoration(Context context, int orientation) {
   final TypedArray a = context.obtainStyledAttributes(ATTRS);
   mDivider = a.getDrawable(0);
   a.recycle();
   setOrientation(orientation);
 }

public void setOrientation(int orientation) {
   if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) {
     throw new IllegalArgumentException("invalid orientation");
   }
   mOrientation = orientation;
 }

@Override
 public void onDraw(Canvas c, RecyclerView parent) {
   Log.v("recyclerview - itemdecoration", "onDraw()");

if (mOrientation == VERTICAL_LIST) {
     drawVertical(c, parent);
   } else {
     drawHorizontal(c, parent);
   }

}

public void drawVertical(Canvas c, RecyclerView parent) {
   final int left = parent.getPaddingLeft();
   final int right = parent.getWidth() - parent.getPaddingRight();

final int childCount = parent.getChildCount();
   for (int i = 0; i < childCount; i++) {
     final View child = parent.getChildAt(i);
     android.support.v7.widget.RecyclerView v = new android.support.v7.widget.RecyclerView(parent.getContext());
     final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
         .getLayoutParams();
     final int top = child.getBottom() + params.bottomMargin;
     final int bottom = top + mDivider.getIntrinsicHeight();
     mDivider.setBounds(left, top, right, bottom);
     mDivider.draw(c);
   }
 }

public void drawHorizontal(Canvas c, RecyclerView parent) {
   final int top = parent.getPaddingTop();
   final int bottom = parent.getHeight() - parent.getPaddingBottom();

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 left = child.getRight() + params.rightMargin;
     final int right = left + mDivider.getIntrinsicHeight();
     mDivider.setBounds(left, top, right, bottom);
     mDivider.draw(c);
   }
 }

@Override
 public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) {
   if (mOrientation == VERTICAL_LIST) {
     outRect.set(0, 0, 0, mDivider.getIntrinsicHeight());
   } else {
     outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0);
   }
 }
}

不能添加图片,那就写这些好了。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com