作为一个刚入行的新手决定从今天开始每天总结一点东西。
RecycleView
优点:内部集成了ViewHolder回收机制。
缺点:没有条目点击事件的功能,如果添加需要自己在adapter中自定义点击事件的接口;
今天就对recycleview的基本使用方法和点击事件的添加做点总结,
首先:基本使用方法:
private void initView() { mRecyclerview = (RecyclerView) findViewById(R.id.list); //第一步设置布局管理器; LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); mRecyclerview.setLayoutManager(linearLayoutManager); //第二步设置横向与竖向; linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); //第三步设置Adapter RecyclerAdapter adapter = new RecyclerAdapter(this, mList); mRecyclerview.setAdapter(adapter); }
关键点在于adapter内容;
package com.example.selfviewdemo; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import java.util.List; public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.SelfHolder> { public static final String TAG = RecyclerAdapter.class.getSimpleName(); private List<String> mData; private Context mContext; private final LayoutInflater mInflater; public RecyclerAdapter(Context context, List<String> data) { mData = data; mContext = context;
//第一步:得到打气筒; mInflater = LayoutInflater.from(context); } //创建 viewholder @Override public SelfHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//将布局加载到view中 View view = mInflater.inflate(R.layout.item, parent, false); return new SelfHolder(view); } //覆盖屏幕中的item @Override public void onBindViewHolder(final SelfHolder holder, int position) { holder.mTextView.setText(mData.get(position)); } @Override public int getItemCount() { return mData.size(); } class SelfHolder extends RecyclerView.ViewHolder { TextView mTextView; public SelfHolder(View itemView) { super(itemView); mTextView = (TextView) itemView.findViewById(R.id.item_text); } } }
最后点击事件的添加:
private void initView() { mRecyclerview = (RecyclerView) findViewById(R.id.list); //第一步设置布局管理器; LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); mRecyclerview.setLayoutManager(linearLayoutManager); //第二步设置横向与竖向; linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); //第三步设置Adapter RecyclerAdapter adapter = new RecyclerAdapter(this, mList); mRecyclerview.setAdapter(adapter); //第四步自定义点击事件(这里的点击事件是自己在adapter中自定义的) adapter.setOnItemClickLitener(new RecyclerAdapter.OnItemClickLitener() { @Override public void onItemClick(View view, int position) { Log.d(TAG, "onItemClick: enter a"); Toast.makeText(getApplicationContext(), "被点击了" + position, Toast.LENGTH_SHORT).show(); } @Override public void onItemLongClick(View view, int position) { } }); }Adapter中要自定义点击事件,
@Override public void onBindViewHolder(final SelfHolder holder, int position) { holder.mTextView.setText(mData.get(position)); if (mOnItemClickLitener != null) { holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d(TAG, "onClick: enter b"); int pos = holder.getLayoutPosition(); mOnItemClickLitener.onItemClick(holder.itemView, pos); } }); holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { int pos = holder.getLayoutPosition(); mOnItemClickLitener.onItemLongClick(holder.itemView, pos); return false; } }); } } public interface OnItemClickLitener { void onItemClick(View view, int position); void onItemLongClick(View view, int position); } private OnItemClickLitener mOnItemClickLitener; public void setOnItemClickLitener(OnItemClickLitener mOnItemClickLitener) { Log.d(TAG, "setOnItemClickLitener: c"); this.mOnItemClickLitener = mOnItemClickLitener; }