首页 > 编程技术 > android

Android中RecyclerView上拉下拉,分割线,多条目的实例代码

发布时间:2017-1-22 11:04

这篇文章介绍了Android中RecyclerView上拉下拉,分割线,多条目的实例代码,非常具有参考价值,有需要的朋友可以参考一下

 

 代码如下复制代码

//activity的xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

  xmlns:tools="http://schemas.android.com/tools"

  android:id="@+id/activity_main"

  android:layout_width="match_parent"

  android:layout_height="match_parent"

  tools:context="baway.com.cj.myrecyclerview2.MainActivity">

  <android.support.v4.widget.SwipeRefreshLayout

    android:id="@+id/swipeRefreshLayout"

    android:layout_width="match_parent"

    android:layout_above="@+id/progress"

    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView

      android:id="@+id/recyclerView"

      android:layout_width="match_parent"

      android:layout_height="match_parent">

    

  

  <ProgressBar

    android:id="@+id/progress"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_centerHorizontal="true"

    android:visibility="gone"

    android:layout_alignParentBottom="true"/>

item1的xml和item2的xml就一个背景颜色不同

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

  xmlns:tools="http://schemas.android.com/tools"

  android:id="@+id/activity_main"

  android:layout_width="match_parent"

  android:layout_height="match_parent"

  android:background="#f00000"

  tools:context="baway.com.cj.myrecyclerview2.MainActivity">

  <TextView

    android:id="@+id/name"

    android:layout_width="match_parent"

    android:layout_height="50dp"

    android:textSize="20sp"

    android:gravity="center"

    android:textColor="#00ff00"/>

item2

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

  xmlns:tools="http://schemas.android.com/tools"

  android:id="@+id/activity_main"

  android:layout_width="match_parent"

  android:layout_height="match_parent"

  android:background="#f000ff"

  tools:context="baway.com.cj.myrecyclerview2.MainActivity">

  <TextView

    android:id="@+id/name"

    android:layout_width="match_parent"

    android:layout_height="50dp"

    android:textSize="20sp"

    android:gravity="center"

    android:textColor="#00ff00"/>

//activity,有上啦下拉,添加分割线,

packagebaway.com.cj.myrecyclerview2;

importandroid.graphics.Color;

importandroid.os.Handler;

importandroid.support.v4.widget.SwipeRefreshLayout;

importandroid.support.v7.app.AppCompatActivity;

importandroid.os.Bundle;

importandroid.support.v7.widget.DefaultItemAnimator;

importandroid.support.v7.widget.LinearLayoutManager;

importandroid.support.v7.widget.RecyclerView;

importandroid.util.Log;

importandroid.view.View;

importandroid.widget.ProgressBar;

importandroid.widget.Toast;

importjava.util.ArrayList;

publicclassMainActivityextendsAppCompatActivity {

  privateRecyclerView recyclerView;

  privateMainAdapter mainAdapter;

  privateSwipeRefreshLayout swipeRefreshLayout;

  privateLinearLayoutManager linearLayoutManager;

  privateProgressBar progress;

  @Override

  protectedvoidonCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    initView();

    initData();

  }

  privatevoidinitView() {

    recyclerView = (RecyclerView)findViewById(R.id.recyclerView);

    swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout);

    progress = (ProgressBar)findViewById(R.id.progress);

    linearLayoutManager =newLinearLayoutManager(this);

    recyclerView.setLayoutManager(linearLayoutManager);

    mainAdapter =newMainAdapter(this);

    mainAdapter.setOnClickListener(newMyItemOnClickListener() {

      @Override

      publicvoidonItemClick(View view,intposition) {

        Toast.makeText(MainActivity.this," "+position, Toast.LENGTH_SHORT).show();

      }

    });

    recyclerView.setAdapter(mainAdapter);

    recyclerView.addItemDecoration(newMyItemDecoration());

    recyclerView.setItemAnimator(newDefaultItemAnimator());

    swipeRefreshLayout.setColorSchemeColors(Color.RED,Color.GREEN,Color.BLUE);

    swipeRefreshLayout.setProgressViewOffset(true,0,200);

    swipeRefreshLayout.setOnRefreshListener(newSwipeRefreshLayout.OnRefreshListener() {

      @Override

      publicvoidonRefresh() {

        newHandler().postDelayed(newRunnable() {

          @Override

          publicvoidrun() {

            swipeRefreshLayout.setRefreshing(false);

          }

        },3000);

      }

    });

    recyclerView.addOnScrollListener(newRecyclerView.OnScrollListener() {

      @Override

      publicvoidonScrolled(RecyclerView recyclerView,intdx,intdy) {

        super.onScrolled(recyclerView, dx, dy);

        intlastVisibleItemPosition = linearLayoutManager.findLastVisibleItemPosition();

        intitemCount = linearLayoutManager.getItemCount();

        if(lastVisibleItemPosition +1>= itemCount && dy >0) {

          progress.setVisibility(View.VISIBLE);

          newHandler().postDelayed(newRunnable() {

            @Override

            publicvoidrun() {

              progress.setVisibility(View.GONE);

            }

          },3000);

        }

      }

      @Override

      publicvoidonScrollStateChanged(RecyclerView recyclerView,intnewState) {

        super.onScrollStateChanged(recyclerView, newState);

      }

    });

  }

  privatevoidinitData() {

    ArrayListstrings =newArrayList<>();

    for(inti =0; i<50; i++) {

      strings.add("name "+i);

    }

    mainAdapter.setData(strings);

    mainAdapter.notifyDataSetChanged();

  }

}

//adpter有多条目展示

packagebaway.com.cj.myrecyclerview2;

importandroid.content.Context;

importandroid.support.v7.widget.RecyclerView;

importandroid.view.LayoutInflater;

importandroid.view.View;

importandroid.view.ViewGroup;

importandroid.widget.TextView;

importjava.util.ArrayList;

/**

 * Created by cj on 2017/1/12.

 */

publicclassMainAdapterextendsRecyclerView.Adapter {

  privateContext context;

  privateArrayListdatas =newArrayList<>();

  privateMyItemOnClickListener myItemOnClickListener;

  privatefinalintTYPE_0 =0;

  privatefinalintTYPE_1 =1;

  publicMainAdapter(Context context) {

    this.context = context;

  }

  @Override

  publicintgetItemViewType(intposition) {

    if(position %3==0) {

      returnTYPE_0;

    }else{

      returnTYPE_1;

    }

  }

  publicvoidsetOnClickListener(MyItemOnClickListener onClickListener) {

    this.myItemOnClickListener = onClickListener;

  }

  @Override

  publicRecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent,intviewType) {

    if(viewType == TYPE_0) {

      View inflate = LayoutInflater.from(context).inflate(R.layout.item_main,null);

      returnnewMyViewHolder(inflate);

    }else{

      View inflate = LayoutInflater.from(context).inflate(R.layout.item_main2,null);

      returnnewMyViewHolder2(inflate);

    }

  }

  @Override

  publicvoidonBindViewHolder(RecyclerView.ViewHolder holder,finalintposition) {

    if(getItemViewType(position) == TYPE_0) {

      MyViewHolder myViewHolder = (MyViewHolder)holder;

      myViewHolder.name.setText(datas.get(position));

      myViewHolder.name.setOnClickListener(newView.OnClickListener() {

        @Override

        publicvoidonClick(View v) {

          myItemOnClickListener.onItemClick(v,position);

        }

      });

    }else{

      MyViewHolder2 myViewHolder = (MyViewHolder2)holder;

      myViewHolder.name.setText(datas.get(position));

      myViewHolder.name.setOnClickListener(newView.OnClickListener() {

        @Override

        publicvoidonClick(View v) {

          myItemOnClickListener.onItemClick(v,position);

        }

      });

    }

  }

  @Override

  publicintgetItemCount() {

    returndatas.size();

  }

  publicvoidsetData(ArrayListdata) {

    if(data ==null) {

      return;

    }

    this.datas.addAll(data);

  }

  publicclassMyViewHolderextendsRecyclerView.ViewHolder{

    publicTextView name;

    publicMyViewHolder(View itemView) {

      super(itemView);

      name = (TextView) itemView.findViewById(R.id.name);

    }

  }

  publicclassMyViewHolder2extendsRecyclerView.ViewHolder{

    publicTextView name;

    publicMyViewHolder2(View itemView) {

      super(itemView);

      name = (TextView) itemView.findViewById(R.id.name);

    }

  }

}

//自定义分割线继承系统的 RecyclerView.ItemDecoration

packagebaway.com.cj.myrecyclerview2;

importandroid.graphics.Canvas;

importandroid.graphics.Color;

importandroid.graphics.Paint;

importandroid.graphics.Rect;

importandroid.support.v7.widget.RecyclerView;

importandroid.util.Log;

importandroid.view.View;

/**

 * Created by cj on 2017/1/12.

 */

publicclassMyItemDecorationextendsRecyclerView.ItemDecoration {

  privatePaint paint;

  publicMyItemDecoration() {

    paint =newPaint();

    paint.setColor(Color.BLUE);

  }

  @Override

  publicvoidonDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {

    super.onDraw(c, parent, state);

    //c.drawCircle(300,300,300,paint);

    intchildCount = parent.getChildCount();

    for(inti =0; i < childCount; i++) {

      View childAt = parent.getChildAt(i);

      c.drawRect(childAt.getLeft(),childAt.getBottom(),childAt.getWidth()+childAt.getLeft(),childAt.getBottom()+5,paint);

    }

  }

  @Override

  publicvoidonDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {

    super.onDrawOver(c, parent, state);

//    int childCount = parent.getChildCount();

//    for (int i = 0; i < childCount; i++) {

//      View childAt = parent.getChildAt(i);

//      c.drawRect(childAt.getLeft(),childAt.getTop(),childAt.getWidth()+childAt.getLeft(),childAt.getBottom()+5,paint);

//    }

  }

  @Override

  publicvoidgetItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {

    super.getItemOffsets(outRect, view, parent, state);

    outRect.set(20,0,20,5);

  }

}

 

标签:[!--infotagslink--]

您可能感兴趣的文章: