今天主要介绍RecyclerView的基本使用方法。下面是实现的Demo的样式。
一、准备阶段
首先我们应该知道RecyclerView主要使用的到是V7包。我们需要在dependencies添加
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
二、布局阶段
使用布局也比较简单,直接添加下面的代码就可以了。
<android.support.v7.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
三、填充阶段
这个阶段比较重要,下面我直接把代码放出来了
public class SecondActivity extends AppCompatActivity {
public static final String TAG = "SecondActivity";
private RecyclerView mRecyclerView;
private MyRcAdapter myAdapter;
private List<People> mlist = new ArrayList<>();
private int[] headIconId = new int[]{
R.drawable.note, R.drawable.opera, R.drawable.phone,
};
private String[] address = new String[]{
"北京",
"上海",
"黑龙江",
"重庆"
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Log.e("ACT","onCreate ---B");
//findViewById(R.id.stub_view).setVisibility(View.INVISIBLE);
initData();
initRecyclerView();
}
private void initData() {
Random random = new Random();
for (int i = 0; i < 30; i++) {
int j = random.nextInt(3);
int k = random.nextInt(4);
mlist.add(new People(address[k],headIconId[j]));
}
}
public void initRecyclerView() {
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
//水平方向
//LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false);
//网格布局
//LinearLayoutManager linearLayoutManager = new GridLayoutManager(this,2);
mRecyclerView = (RecyclerView) findViewById(R.id.rv);
myAdapter = new MyRcAdapter(SecondActivity.this,mlist);
//设置LinearLayoutManager
mRecyclerView.setLayoutManager(linearLayoutManager);
mRecyclerView.setAdapter(myAdapter);
//如果可以确定每个item的高度是固定的,设置这个选项可以提高性能
mRecyclerView.setHasFixedSize(true);
//添加Android自带的分割线
mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
myAdapter.setOnRecyclerViewListener(new MyRcAdapter.onRecyclerViewListener() {
@Override
public void editHeadIcon(int position) {
Toast.makeText(SecondActivity.this, position+"位置", Toast.LENGTH_SHORT).show();
}
@Override
public void deleteInfo(int position) {
if (position < mlist.size() && position >= 0) {
mlist.remove(position);
myAdapter.notifyDataSetChanged();
}
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.e("ACT","onDestroy ---B");
}
}
填充Adapter。
/**
* Created by gsoft2-3 on 19-5-21.
*/
public class MyRcAdapter extends RecyclerView.Adapter<MyRcAdapter.MyViewHolder> implements View.OnClickListener {
public Context context;
public List<People> mlist;
public onRecyclerViewListener monRecyclerViewListener;
public static final String TAG = "MyRcAdapter";
public MyRcAdapter(Context context, List<People> mlist) {
this.context = context;
this.mlist = mlist;
}
@Override
//拿到根布局
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
MyViewHolder viewHolder;
View inflate = LayoutInflater.from(context).inflate(R.layout.adapter_item_info, parent, false);
viewHolder = new MyViewHolder(inflate);
Log.e(TAG,"onCreateViewHolder");
return viewHolder;
}
@Override
//填充数据
public void onBindViewHolder(MyViewHolder holder, int position) {
People people = mlist.get(position);
holder.ivHead.setTag(position);
holder.ivDelete.setTag(position);
holder.tvPersonInfo.setText(people.getAddress());
holder.ivHead.setImageResource(people.getHeadIconId());
holder.ivHead.setOnClickListener(this);
holder.ivDelete.setOnClickListener(this);
Log.e(TAG,"onBindViewHolder +"+position);
}
@Override
public int getItemCount() {
return mlist.size();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.iv_adapter_head:
int position= (int) v.getTag();
monRecyclerViewListener.editHeadIcon(position);
break;
case R.id.imgbtn_adapter_remove:
int position1= (int) v.getTag();
monRecyclerViewListener.deleteInfo(position1);
break;
default:
break;
}
}
//必须实现RecyclerView.ViewHolder
public class MyViewHolder extends RecyclerView.ViewHolder {
ImageView ivHead;
TextView tvPersonInfo;
ImageView ivDelete;
public MyViewHolder(View itemView) {
super(itemView);
ivHead = itemView.findViewById(R.id.iv_adapter_head);
tvPersonInfo = itemView.findViewById(R.id.tv_adapter_message);
ivDelete = itemView.findViewById(R.id.imgbtn_adapter_remove);
}
}
//点击事件的创建
public void setOnRecyclerViewListener(MyRcAdapter.onRecyclerViewListener onRecyclerViewListener) {
monRecyclerViewListener = onRecyclerViewListener;
}
public interface onRecyclerViewListener {
void editHeadIcon(int position);
void deleteInfo(int position);
}
}
上面需要介绍的方法
Adapter中必须要重写的3个方法
onCreateViewHolder()
这个方法主要生成为每个Item inflater出一个View,但是该方法返回的是一个ViewHolder。该方法把View直接封装在ViewHolder中,然后我们面向的是ViewHolder这个实例,当然这个ViewHolder需要我们自己去编写
onBindViewHolder()
主要用于填充数据,绑定点击事件等
getItemCount()
这个方法主要是返回一共有多少条目。