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,或者错误的地方请指正出来,谢谢大家。