RecyclerCardView浅谈

Android早期开发者都知道ListView是Android UI设计中一个非常重要的Widgets,但是同时对于我们初学者来说也比较麻烦的几个Widgets之一,但是自从android-support-v7-21 版本中新增RecyclerView后,RecyclerView在使用上更加先进和灵活了,大有取代ListView的趋势。下面我们以一个小Demo形式来简要熟悉下RecyclerView+CardView的用法。

开发环境:Android Studio

题目要求:RecyclerView 呈现所有商品信息;每一列资料则改以 CardView 呈现该列商品的图片、品名与价格。

首先在布局上,主要采用大布局(LinearLayout)中使用RecyclerView,进而在RecyclerView中嵌套小的布局(CardView),完成整个xml文档布局上的 基本的设定。xml核心源码如下:

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

<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/cardview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="6dp"
android:padding="6dp"
card_view:cardBackgroundColor="#ffdddddd"
card_view:cardCornerRadius="28dp"
card_view:cardElevation="6dp">

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">

......
</LinearLayout>
</android.support.v7.widget.CardView>

PS:android.support.v7导入:File->Project Structure->app->Dependencies->

接下来是关于处理程序部门,依照题目要求,程式部分主要分为两部分,一个是MainActivity,另一个是一个自定义Member类。前者主要是处理对应的UI以及响应事件的逻辑程序,后者主要为自定义对象的属性以及设定相关的get set方法。

MainActivity核心源码:

//在onCreate方法中声明RecyclerView
RecyclerView recyclerView =(RecyclerView)findViewById(R.id.recyclerView);
//调用setLayoutManager方法,这是一个非常弹性的方法,可以设置recyclerView显示要展示的
//对象的形式,数字代表行或者列上的显示数量,StaggeredGridLayoutManager则表示其是以水平滑动浏览或者垂直滑动浏览
recyclerView.setLayoutManager(new StaggeredGridLayoutManager(1,StaggeredGridLayoutManager.VERTICAL));

//申明一个List动态加载对应的一个member的信息,准备要显示的资料
List<Member> memberList = new ArrayList<>();
memberList.add...

//setAdapter中主要传this(这里是指MainActivity)和memberList两个参数
recyclerView.setAdapter(new MemberAdapter(this, memberList));

//对于显示List资料在界面的这里主要采用Adapter,即一个继承自RecyclerView内部类别的MemberAdapter
private class MemberAdapter extends RecyclerView.Adapter {
//定义三个属性
private Context context;
//以下这两个对应上面的setAdapter中的两个参数
private LayoutInflater layoutInflater;
private List memberList;

public MemberAdapter(Context context, List memberList) {
this.context = context;
//将layout档案套用进来,调用LayoutInflater
layoutInflater = LayoutInflater.from(context);
//传资料档进入
this.memberList = memberList;
}

//ViewHolder 主要作用在于管理载入的所有相关的View组件
public class ViewHolder extends RecyclerView.ViewHolder {
ImageView ivImage;
TextView tvId, tvName;
View itemView;

public ViewHolder(View itemView) {
super(itemView);
this.itemView = itemView;
ivImage = (ImageView) itemView.findViewById(R.id.ivImage);
tvId = (TextView) itemView.findViewById(R.id.tvId);
tvName = (TextView) itemView.findViewById(R.id.tvName);
}
}

//重写继承的Adapter中的三个方法

// 回传RecyclerView的总的选项数
public int getItemCount() {
return memberList.size();
}

@Override
//动态载入对应的每个选项layout,并呼叫ViewHolder的构造器
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
View itemView = layoutInflater.inflate(
R.layout.recyclerview_cardview_item, viewGroup, false);
return new ViewHolder(itemView);
}

@Override
//将ViewHolder 所呼叫到的当前的layout档以及信息一一做出相应的设定和套用
//
public void onBindViewHolder(ViewHolder viewHolder, final int position) {
//position为获取当前点击事件所在的位置,对应到相应的list中资料位置
final Member member = memberList.get(position);
viewHolder.ivImage.setImageResource(member.getImage());
viewHolder.tvId.setText(String.valueOf(member.getId()));
viewHolder.tvName.setText(member.getName());

//以下是设定对应的监听事件,这里主要使用Toast方法对对应的监听事件做出处理
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Member member = memberList.get(position);
String text = "ID = " + member.getId() +
", name = " + member.getName();
Toast.makeText(MainActivity.this, text, Toast.LENGTH_SHORT).show();
}
});

viewHolder.tvId.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Member member = memberList.get(position);
String text = "ID = " + member.getId();
Toast.makeText(MainActivity.this, text, Toast.LENGTH_SHORT).show();
}
});

viewHolder.tvName.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Member member = memberList.get(position);
String text = "name = "+member.getName();
Toast.makeText(MainActivity.this, text, Toast.LENGTH_SHORT).show();
}
});
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值