最近因为毕业设计需要使用RecyclerView,所以在网上查了些资料。在这里记录一下,以后备用。
要使用它,首先需要将支持包导入
它在sdk中的路径:sdk\extras\android\support\v7
并在你的项目中将其作为库文件
记得点一下Apply
创建布局文件(注意写全称)
<android.support.v7.widget.RecyclerView
android:id="@+id/rv_game_msg"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
在activity中首先寻找到RecyclerView控件
interest_game = (RecyclerView) view.findViewById(R.id.rv_game_msg);
创建一个线性布局管理器,并设置方向
LinearLayoutManager msgLayoutManager= new LinearLayoutManager(getActivity());
msgLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
为Recycler设置布局
interest_game.setLayoutManager(msgLayoutManager);
创建Adapter,重写一些方法。泛型是在该类内部定义的
public class InterestMsgAdapter extends RecyclerView.Adapter<InterestMsgAdapter.ViewHolder>
private List<Message>msgs; //数据源
private OnItemClickListenermlistener; //监听事件
//创建Adapter时,将数据直接传进来
public InterestMsgAdapter(List<Message> msgs) {
this.msgs = msgs;
}
//重写父类方法,返回数据的长度
@Override
public int getItemCount() {
returnmsgs.size();
}
//初始化ViewHolder
@Override
public ViewHolder onCreateViewHolder(ViewGroup arg0,int arg1) {
View view = View.inflate(arg0.getContext(),R.layout.msg_recyclerview_item,null);
ViewHolder holder = newViewHolder(view, mlistener);
return holder;
}
//为ViewHolder绑定数据
@Override
public void onBindViewHolder(ViewHolder holder,int arg1) {
holder.textUsername.setText(msgs.get(arg1).getUserName());
holder.textMsgTitle.setText(msgs.get(arg1).getMsgTitle());
holder.textMsgDate.setText(msgs.get(arg1).getMsgDate());
holder.textMsgAnswerCount.setText(Config.setMsgAnswerCount(msgs.get( arg1).getMsgAnswerCount()));
holder.textMsgFlag.setText(Config.setMsgFlag(msgs.get(arg1) .getMsgFlag()));
//将数据保存在itemView的Tag中,以便点击时进行获取
holder.itemView.setTag(msgs.get(arg1));
}
内部定义ViewHolder类,继承RecyclerView.ViewHolder,因为RecyclerView没有点击事件。所以我们给Adapter创建一个。
publicstaticclassViewHolderextendsRecyclerView.ViewHolderimplements OnClickListener{
public TextView textUsername, textMsgTitle, textMsgDate,textMsgAnswerCount,textMsgFlag;
private OnItemClickListener listener;
//在创建Viewholder时,绑定各个控件
public ViewHolder(View arg0,OnItemClickListener listener) {
super(arg0);
this.listener = listener;
arg0.setOnClickListener(this);
textUsername = (TextView)arg0.findViewById(R.id.tv_msgitem_username);
textMsgTitle = (TextView)arg0.findViewById(R.id.tv_msgitem_msgtitle);
textMsgDate = (TextView)arg0.findViewById(R.id.tv_msgitem_msgdate);
textMsgAnswerCount= (TextView) arg0.findViewById(R.id.tv_msgitem_msganswercount);
textMsgFlag = (TextView)arg0.findViewById(R.id.tv_msgitem_msgflag);
}
//点击事件
@SuppressWarnings("deprecation")
@Override
public void onClick(View v) {
if (listener !=null) {
listener.onItemClick(v, getPosition(),(Message) v.getTag());
}
}
}
/**
*自定义的模仿ListView的OnItemClickListener,开放了view和position,message三个参数
*@author Administrator
*/
public staticinterface OnItemClickListener {
public void onItemClick(View view,int postion, Message msg);
}
//将接口暴露出去
public void setOnItemClickListener(OnItemClickListener listener) {
mlistener = listener;
}
在Activity中创建Adapter对象,并将其设置到Recycler中
InterestMsgAdapter msgAdapter =new InterestMsgAdapter(msgs);
interest_game.setAdapter(msgAdapter);
为Adapter创建监听
msgAdapter.setOnItemClickListener(new RecylerViewClick());
自己创建一个class文件,实现监听的借口
class RecylerViewClickimplements InterestMsgAdapter.OnItemClickListener {
@Override
public void onItemClick(View view,int postion, Message msg) {
Intentintent = newIntent(getActivity(), AnswerActivity.class);
intent.putExtra(Config.KEY_EXTRA_MESSAGE,msg);
startActivity(intent);
}
}
-----------------------------------------------------------------------------END----------------------------------------------------------------------