栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

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

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

//activity的xml


  
    
    
  
  

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


  

item2


  

//activity,有上啦下拉,添加分割线,
package baway.com.cj.myrecyclerview2;
import android.graphics.Color;
import android.os.Handler;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.Toast;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
  private RecyclerView recyclerView;
  private MainAdapter mainAdapter;
  private SwipeRefreshLayout swipeRefreshLayout;
  private LinearLayoutManager linearLayoutManager;
  private ProgressBar progress;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initView();
    initData();
  }
  private void initView() {
    recyclerView = (RecyclerView)findViewById(R.id.recyclerView);
    swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout);
    progress = (ProgressBar)findViewById(R.id.progress);
    linearLayoutManager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(linearLayoutManager);
    mainAdapter = new MainAdapter(this);
    mainAdapter.setonClickListener(new MyItemonClickListener() {
      @Override
      public void onItemClick(View view, int position) {
 Toast.makeText(MainActivity.this, " "+position, Toast.LENGTH_SHORT).show();
      }
    });
    recyclerView.setAdapter(mainAdapter);
    recyclerView.addItemDecoration(new MyItemDecoration());
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    swipeRefreshLayout.setColorSchemeColors(Color.RED,Color.GREEN,Color.BLUE);
    swipeRefreshLayout.setProgressViewOffset(true,0,200);
    swipeRefreshLayout.setonRefreshListener(new SwipeRefreshLayout.onRefreshListener() {
      @Override
      public void onRefresh() {
 new Handler().postDelayed(new Runnable() {
   @Override
   public void run() {
     swipeRefreshLayout.setRefreshing(false);
   }
 },3000);
      }
    });
    recyclerView.addonScrollListener(new RecyclerView.onScrollListener() {
      @Override
      public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
 super.onScrolled(recyclerView, dx, dy);
 int lastVisibleItemPosition = linearLayoutManager.findLastVisibleItemPosition();
 int itemCount = linearLayoutManager.getItemCount();
 if (lastVisibleItemPosition + 1 >= itemCount && dy > 0) {
   progress.setVisibility(View.VISIBLE);
   new Handler().postDelayed(new Runnable() {
     @Override
     public void run() {
progress.setVisibility(View.GONE);
     }
   },3000);
 }
      }
      @Override
      public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
 super.onScrollStateChanged(recyclerView, newState);
      }
    });
  }
  private void initData() {
    ArrayList strings = new ArrayList<>();
    for (int i = 0; i < 50; i++) {
      strings.add("name "+i);
    }
    mainAdapter.setData(strings);
    mainAdapter.notifyDataSetChanged();
  }
}
//adpter有多条目展示
package baway.com.cj.myrecyclerview2;
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.TextView;
import java.util.ArrayList;

public class MainAdapter extends RecyclerView.Adapter {
  private Context context;
  private ArrayList datas = new ArrayList<>();
  private MyItemonClickListener myItemOnClickListener;
  private final int TYPE_0 = 0;
  private final int TYPE_1 = 1;
  public MainAdapter(Context context) {
    this.context = context;
  }
  @Override
  public int getItemViewType(int position) {
    if (position %3 == 0) {
      return TYPE_0;
    } else {
      return TYPE_1;
    }
  }
  public void setonClickListener(MyItemonClickListener onClickListener) {
    this.myItemonClickListener = onClickListener;
  }
  @Override
  public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    if (viewType == TYPE_0) {
      View inflate = LayoutInflater.from(context).inflate(R.layout.item_main, null);
      return new MyViewHolder(inflate);
    } else {
      View inflate = LayoutInflater.from(context).inflate(R.layout.item_main2, null);
      return new MyViewHolder2(inflate);
    }
  }
  @Override
  public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
    if (getItemViewType(position) == TYPE_0) {
      MyViewHolder myViewHolder = (MyViewHolder)holder;
      myViewHolder.name.setText(datas.get(position));
      myViewHolder.name.setonClickListener(new View.onClickListener() {
 @Override
 public void onClick(View v) {
   myItemOnClickListener.onItemClick(v,position);
 }
      });
    } else {
      MyViewHolder2 myViewHolder = (MyViewHolder2)holder;
      myViewHolder.name.setText(datas.get(position));
      myViewHolder.name.setonClickListener(new View.onClickListener() {
 @Override
 public void onClick(View v) {
   myItemOnClickListener.onItemClick(v,position);
 }
      });
    }
  }
  @Override
  public int getItemCount() {
    return datas.size();
  }
  public void setData(ArrayList data) {
    if (data == null) {
      return;
    }
    this.datas.addAll(data);
  }
  public class MyViewHolder extends RecyclerView.ViewHolder{
    public TextView name;
    public MyViewHolder(View itemView) {
      super(itemView);
      name = (TextView) itemView.findViewById(R.id.name);
    }
  }
  public class MyViewHolder2 extends RecyclerView.ViewHolder{
    public TextView name;
    public MyViewHolder2(View itemView) {
      super(itemView);
      name = (TextView) itemView.findViewById(R.id.name);
    }
  }
}
//自定义分割线继承系统的 RecyclerView.ItemDecoration
package baway.com.cj.myrecyclerview2;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;

public class MyItemDecoration extends RecyclerView.ItemDecoration {
  private Paint paint;
  public MyItemDecoration() {
    paint = new Paint();
    paint.setColor(Color.BLUE);
  }
  @Override
  public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
    super.onDraw(c, parent, state);
    //c.drawCircle(300,300,300,paint);
    int childCount = parent.getChildCount();
    for (int i = 0; i < childCount; i++) {
      View childAt = parent.getChildAt(i);
      c.drawRect(childAt.getLeft(),childAt.getBottom(),childAt.getWidth()+childAt.getLeft(),childAt.getBottom()+5,paint);
    }
  }
  @Override
  public void onDrawOver(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
  public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
    super.getItemOffsets(outRect, view, parent, state);
    outRect.set(20,0,20,5);
  }
}

以上所述是小编给大家介绍的Android中RecyclerView上拉下拉,分割线,多条目的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对考高分网网站的支持!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/160188.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号