adpater的代码:
<pre name="code" class="java">import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.augur.widgetdemo.Interface.OnRecyclerViewItemClickListener;
import com.augur.widgetdemo.Interface.OnRecyclerViewItemLongClickListener;
import com.augur.widgetdemo.R;
import java.util.List;
/**
* 项目名称:HelloWorld
* Created by xcl on 2016-03-02.
*/
public class RecycleViewAdapter extends RecyclerView.Adapter<RecycleViewAdapter.MyViewHolder> {
private Context mContext;
private List<String> mData;
private OnRecyclerViewItemClickListener mOnRecyclerViewItemClickListener;
private OnRecyclerViewItemLongClickListener mOnRecyclerViewItemLongClickListener;
//data是我们传递过来的数据
public RecycleViewAdapter(Context context,List<String> data){
this.mContext = context;
this.mData = data;
}
//方法重载,通过构造函数把两个listener传递进来
public RecycleViewAdapter(Context context,List<String> data,OnRecyclerViewItemLongClickListener itemLongClickListener,OnRecyclerViewItemClickListener listener){
this.mContext = context;
this.mData = data;
this.mOnRecyclerViewItemClickListener = listener;
this.mOnRecyclerViewItemLongClickListener = itemLongClickListener;
}
//recycleview已经把viewholder封装好的,我们只需要创建一个viewholder。然后传递给他,它自己会去缓存视图
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//创建一个viewholder并返回
//缺少context,我们在构造函数中让上级传递过来
View view = LayoutInflater.from(mContext).inflate(R.layout.recycleview_item,parent,false);
MyViewHolder myViewHolder = new MyViewHolder(view,mOnRecyclerViewItemClickListener,mOnRecyclerViewItemLongClickListener);
return myViewHolder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
//绑定视图
holder.mImageView.setImageResource(R.mipmap.pic);
holder.mTextView.setText(mData.get(position));
}
@Override
public int getItemCount() {
return mData.size();
}
public static class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener,View.OnLongClickListener{
private ImageView mImageView;
private TextView mTextView;
private OnRecyclerViewItemClickListener mOnRecyclerViewItemClickListener;
private OnRecyclerViewItemLongClickListener mOnRecyclerViewItemLongClickListener;
public MyViewHolder(View itemView,OnRecyclerViewItemClickListener listener,OnRecyclerViewItemLongClickListener longClickListener) {
super(itemView);
mImageView = (ImageView) itemView.findViewById(R.id.recycleview_item_pic);
mTextView = (TextView) itemView.findViewById(R.id.recycleview_item_name);
this.mOnRecyclerViewItemClickListener = listener;
this.mOnRecyclerViewItemLongClickListener = longClickListener;
itemView.setOnClickListener(this);
itemView.setOnLongClickListener(this);
}
@Override
public void onClick(View v) {
if (mOnRecyclerViewItemClickListener!=null){
mOnRecyclerViewItemClickListener.onItemClick(v,getPosition());
}
}
@Override
public boolean onLongClick(View v) {
if (mOnRecyclerViewItemLongClickListener!=null){
mOnRecyclerViewItemLongClickListener.onItemLongClick(v,getPosition());
}
return true;
}
}
}
两个接口的代码:
public interface OnRecyclerViewItemClickListener {
//仿造Listview的点击事件,返回一个view和位置
void onItemClick(View view,int position);
}
public interface OnRecyclerViewItemLongClickListener {
void onItemLongClick(View view,int position);
}
最后是主程序代码:
public class RecycleViewActivity extends AppCompatActivity implements OnRecyclerViewItemClickListener,OnRecyclerViewItemLongClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recycleaview);
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycleview);
//给他设置LayoutManager,这里设置的线性布局
//接下来演示使用RecycleView的神奇之处,只需要改动LayoutManager就可以获得不同的而不惧
recyclerView.setLayoutManager(new LinearLayoutManager(this));
//设置成表格布局,两列
//recyclerView.setLayoutManager(new GridLayoutManager(this,2));
//设置成瀑布流,现在这样看不出来效果,大家可以把数据源改成大小不一的图片试试效果
// recyclerView.setLayoutManager(new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL));
//给RecycleView设置适配器
List<String> data = new ArrayList<>();
for (int i =0; i< 100; i++){
data.add(i,"你的第"+i+"个好友");
}
//记住还要改这里
RecycleViewAdapter adapter = new RecycleViewAdapter(this,data,this,this);
recyclerView.setAdapter(adapter);
//到这里,我们就完成了recyclerview点击事件的设置,现在测试一下
}
@Override
public void onItemClick(View view, int position) {
Toast.makeText(RecycleViewActivity.this, "第"+position+"个位置被点击", Toast.LENGTH_SHORT).show();
}
@Override
public void onItemLongClick(View view, int position) {
Toast.makeText(RecycleViewActivity.this, "第"+position+"个位置被长按", Toast.LENGTH_SHORT).show();
}
}