MVP框架RecyclerView多种样式布局显示

本文介绍了RecyclerView在Android开发中的应用,如何替代ListView和GridView,并详细讲解了如何配置依赖、设置布局、自定义适配器、添加分割线以及在主方法中的实际运用,展示了RecyclerView的强大功能。
摘要由CSDN通过智能技术生成

RecyclerView已经取代了ListView和GridView,实现的功能 远远比它们强大
首先要到如依赖compile ‘com.android.support:recyclerview-v7:25.3.1’,将版本改成自己Studio的版本

一、布局格式

//主方法的布局
<android.support.v4.widget.SwipeRefreshLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/onSwip">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/onRecy"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            ></android.support.v7.widget.RecyclerView>

    </android.support.v4.widget.SwipeRefreshLayout>
//第二个布局文件
 <ImageView
        android:id="@+id/onimg"
        android:padding="5dp"
        android:layout_width="100dp"
        android:layout_height="100dp" />

    <TextView
        android:id="@+id/ontv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="5dp"
        android:textColor="#8000FF" />

二、重写适配器

public class MyAdapter extends RecyclerView.Adapter{
    private Context context;
    private HomePersonter homePersonter;
    private List<HomeBean.ResultBean.DataBean> list = new ArrayList<>();
    private ViewHolder viewHolder;

    public MyAdapter(Context context){
        this.context = context;
    }

    public void getPresenter(HomePersonter homePersonter){
        this.homePersonter = homePersonter;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = View.inflate(context,R.layout.images,null);
        ViewHolder vholder = new ViewHolder(view);
        return vholder;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        viewHolder = (ViewHolder) holder;
        viewHolder.ontv.setText(list.get(position).getTitle());
        homePersonter.getImage(viewHolder.onimg,list.get(position).getThumbnail_pic_s());
    }

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

    public void getDate( List<HomeBean.ResultBean.DataBean> lists){
        if (lists != null){
            this.list = lists;
        }
    }

    //优化的类
    class ViewHolder extends RecyclerView.ViewHolder{

        private final TextView ontv;
        private final ImageView onimg;

        public ViewHolder(View itemView) {
            super(itemView);
            ontv = (TextView) itemView.findViewById(R.id.ontv);
            onimg = (ImageView) itemView.findViewById(R.id.onimg);
        }
    }
    //上拉、下拉添加数据
    public void AddHeaderItme(List<HomeBean.ResultBean.DataBean> list){
        this.list.addAll(0,list);
        notifyDataSetChanged();
    }
    public void AddFootItme(List<HomeBean.ResultBean.DataBean> list){
        this.list.addAll(list);
        notifyDataSetChanged();
    }

}

三、添加分割线

public class MyDecoration extends RecyclerView.ItemDecoration {

    private Context context;
    public  MyDecoration(Context context){
        this.context = context;
    }

    @Override
    public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
        super.onDraw(c, parent, state);
        int count = parent.getChildCount();
        for (int i = 0; i < count; i ++){
            View view = parent.getChildAt(i);
            int left = view.getLeft();
            int right = view.getRight();
            int top = view.getBottom()-10;
            int bottom = view.getBottom();
            Paint paint = new Paint();
            paint.setColor(Color.RED);
            c.drawRect(left,top,right,bottom,paint);
        }
    }
}

四、主方法实现

public class MainActivity extends AppCompatActivity  implements IHomeInterface<HomeBean> {

  //  private ListView onLv;
    private HomeAdapter adapter;
    private HomePersonter homePersonter;
    private MyAdapter myAdapter;
    private RecyclerView onRecy;
    private SwipeRefreshLayout onSwip;
    private HomeBean homeBea;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //条目显示控件的ID
        onRecy = (RecyclerView) findViewById(R.id.onRecy);
        onSwip = (SwipeRefreshLayout) findViewById(R.id.onSwip);

        initDate();
        initView();
    }

    private void initDate() {

        homePersonter = new HomePersonter();
        homePersonter.attachView(this);
        homePersonter.getHomeData(HomeBean.class);
        //添加适配器
        myAdapter = new MyAdapter(this);
        myAdapter.getPresenter(homePersonter);

        // 实现的事条目下的分割线
        onRecy.addItemDecoration(new MyDecoration(this));

    }

    private void initView() {
        //刷新时更变颜色
        onSwip.setColorSchemeColors(Color.RED,Color.YELLOW,Color.GREEN,Color.BLUE,Color.CYAN);

        //线性布局显示效果
        LinearLayoutManager linearManager = new LinearLayoutManager(this);
        //设置为一个3列的纵向网格布局
        GridLayoutManager gridManager = new GridLayoutManager(MainActivity.this, 3, GridLayoutManager.VERTICAL, false);
        //实现效果是瀑布流
        int count = 3;
        StaggeredGridLayoutManager staggerManager = new StaggeredGridLayoutManager(count,StaggeredGridLayoutManager.VERTICAL);

        //设置布局管理器
        onRecy.setLayoutManager(gridManager);
        onRecy.setAdapter(myAdapter);
        AddUpCount();
        AddDomnCount();
    }
    //上拉刷新
    public void AddUpCount(){
        onSwip.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        List<HomeBean.ResultBean.DataBean> list = homeBea.getResult().getData();
                        if (list!=null){
                            myAdapter.AddHeaderItme(list);
                            //数据加载完毕后,关闭动画
                            onSwip.setRefreshing(false);
                            Toast.makeText(MainActivity.this,"数据上拉刷新",Toast.LENGTH_SHORT).show();
                        }
                    }
                },3000);
            }
        });
    }
    //下拉加载
    public void AddDomnCount(){
        onRecy.setOnScrollListener(new RecyclerView.OnScrollListener() {

            int last ;
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);

                if (newState == RecyclerView.SCROLL_STATE_IDLE && last+1 == myAdapter.getItemCount()){
                    new Handler().postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            List<HomeBean.ResultBean.DataBean> list = homeBea.getResult().getData();
                            if (list!=null){
                                myAdapter.AddFootItme(list);
                                Toast.makeText(MainActivity.this,"数据下拉加载",Toast.LENGTH_SHORT).show();
                            }
                        }
                    },3000);
                }
            }

            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                GridLayoutManager stat = (GridLayoutManager) recyclerView.getLayoutManager();
                last = stat.findLastVisibleItemPosition();

            }
        });
    }

    //重写接口中的方法
    @Override
    public void callBacks(HomeBean homeBean) {
        homeBea = homeBean;
        myAdapter.getDate(homeBean.getResult().getData());
        myAdapter.notifyDataSetChanged();
        Log.i("MyActivity",""+homeBean);

    }


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值