更加强大的滚动控件RecyclerView 的应用(一)

更加强大的滚动控件RecyclerView

Android提供的RecyclerView的滚动控件,它是增强版的ListView,不仅可以轻松的实现和ListView同样的效果,还优化了ListView中存在的各种不足。Android官方更加推荐使用RecyclerView,未来也会更多的程序从逐渐ListView转向RecyclerView,接下实现了简单的ListView展示的效果。接下来贴代码。

导入依赖包


implementation 'com.android.support:recyclerview-v7:28.0.0'

页面布局部分

activity_mian.xml布局部分


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

    </android.support.v7.widget.RecyclerView>

item_list_view.xml里面的设置

// An highlighted block
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="90dp">

    <ImageView
        android:id="@+id/list_view_icon"
        android:layout_width="70dp"
        android:layout_height="70dp"
        android:layout_margin="10dp"
        android:scaleType="fitXY"
        android:src="@mipmap/pic_01"
        />
    <TextView
        android:id="@+id/list_view_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginLeft="20dp"
        android:layout_toRightOf="@+id/list_view_icon"
        android:text="我是标题"
        android:textSize="30sp"
        />
    
</RelativeLayout>

这里放一个图片和一个标题

适配器adapter

package com.test.myapplication.adapters;

import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.test.myapplication.R;
import com.test.myapplication.beans.ItemBean;

import java.util.List;

public class ListViewAdapter extends RecyclerView.Adapter<ListViewAdapter.InnerHolder>{

    private final List<ItemBean> mData;

    public ListViewAdapter(List<ItemBean> data){
        this.mData = data;
    }

    /**
     * 内部创建数据view
     * @param viewGroup
     * @param i
     * @return
     */
    @NonNull
    @Override
    public InnerHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        //传进去的这个view的界面 1.拿到view 2.创建InnerHolder
        View view = View.inflate(viewGroup.getContext(), R.layout.item_list_view,null);
        return new InnerHolder(view);
    }

    /**
     * 绑定内部 InnerHolder ,用于设置数据的
     * @param innerHolder
     * @param i
     */
    @Override
    public void onBindViewHolder(@NonNull InnerHolder innerHolder, int i) {
        //设置数据
        innerHolder.setData(mData.get(i));
    }

    /**
     * 返回数据个数
     * @return
     */
    @Override
    public int getItemCount() {
        if (mData != null) {
            return  mData.size();
        }
        return 0;
    }

    public class InnerHolder extends RecyclerView.ViewHolder {

        private final ImageView mIcon;
        private final TextView mTitle;

        //找到list 里面的界面元素
        public InnerHolder(@NonNull View itemView) {
            super(itemView);
            mIcon = itemView.findViewById(R.id.list_view_icon);
            mTitle = itemView.findViewById(R.id.list_view_title);
        }

        //设置数据
        public void setData(ItemBean itemBean) {
            mIcon.setImageResource(itemBean.getIcon());
            mTitle.setText(itemBean.getTitle());
        }
    }


}


数据bean部分


package com.test.myapplication.beans;

public class ItemBean {

    private int icon;
    private String title;

    public int getIcon() {
        return icon;
    }

    public void setIcon(int icon) {
        this.icon = icon;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    @Override
    public String toString() {
        return "ItemBean{" +
                "icon=" + icon +
                ", title='" + title + '\'' +
                '}';
    }
}

获取照片的类

package com.test.myapplication.beans;


import com.test.myapplication.R;

public class Datas {
    public static int[] icons = {
            R.mipmap.pic_01,
            R.mipmap.pic_02,
            R.mipmap.pic_03,
            R.mipmap.pic_04,
            R.mipmap.pic_11,
            R.mipmap.pic_05,
            R.mipmap.pic_06,
            R.mipmap.pic_07,
            R.mipmap.pic_08,
            R.mipmap.pic_09,
            R.mipmap.pic_10,
            R.mipmap.pic_03,
            R.mipmap.pic_03,
            R.mipmap.pic_04,
            R.mipmap.pic_05,
            R.mipmap.pic_06,
            R.mipmap.pic_07,
            R.mipmap.pic_03,
            R.mipmap.pic_04,
            R.mipmap.pic_05,
            R.mipmap.pic_06,
            R.mipmap.pic_07,
            R.mipmap.pic_08,
            R.mipmap.pic_09,
            R.mipmap.pic_10,
            R.mipmap.pic_11,
            R.mipmap.pic_11,
            R.mipmap.pic_08,
            R.mipmap.pic_09,
            R.mipmap.pic_10,
            R.mipmap.pic_11,
            R.mipmap.pic_05,
            R.mipmap.pic_06,
            R.mipmap.pic_07,
            R.mipmap.pic_08,
            R.mipmap.pic_09,
            R.mipmap.pic_10,
            R.mipmap.pic_03,
            R.mipmap.pic_04,
            R.mipmap.pic_05,
            R.mipmap.pic_06,
            R.mipmap.pic_07,
            R.mipmap.pic_08,
            R.mipmap.pic_09,
            R.mipmap.pic_10,
            R.mipmap.pic_11,
            R.mipmap.pic_11,
            R.mipmap.pic_12};
}


将图片放入res 包中的mipmap-hdpi 将图片数据初始化

剩下的就是MainActivity中的代码了

package com.test.myapplication;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import com.test.myapplication.adapters.ListViewAdapter;
import com.test.myapplication.beans.Datas;
import com.test.myapplication.beans.ItemBean;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private static final String TAG ="MainActivity" ;
    private RecyclerView mList;
    private List<ItemBean> mDatas;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mList = findViewById(R.id.recycler_view);

        //数据
        initData();
    }

    //初始化数据
    private void initData() {

        mDatas = new ArrayList<>();

        for (int i = 0; i < Datas.icons.length ; i++) {

            ItemBean  itemBean = new ItemBean();
            itemBean.setIcon(Datas.icons[i]);
            itemBean.setTitle("我是第"+i+"条数据");
            mDatas.add(itemBean);
        }
        //设置样式
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        mList.setLayoutManager(linearLayoutManager);
        //创建适配器
        ListViewAdapter adapter = new ListViewAdapter(mDatas);
        //设置到RecyclerView
        mList.setAdapter(adapter);
        
    }
  
}


总结

这就是RecyclerView的像ListView的显示部分,代码已经完成了这些的第一部分,如果有什么bug,或者错误的地方请指正出来,谢谢大家。

猜你喜欢

转载自blog.csdn.net/weixin_43111386/article/details/86549972