代码如下:
package com.qianqian.recyclerview;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
//初始化变量
RecyclerView rv;
List<String> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找控件
rv= (RecyclerView) findViewById(R.id.rv);
initRV();
}
private void initRV() {
//创建数据源
initData();
LinearLayoutManager manager=new LinearLayoutManager(this);
rv.setLayoutManager(manager);
//设置适配器
Myadapter adapter=new Myadapter();
rv.setAdapter(adapter);条目
//适配器的条目点击监听
adapter.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
//在Activity中我们实现了接口方法并在里面打印Toast提示:
Toast.makeText(MainActivity.this,"---"+position,Toast.LENGTH_SHORT).show();
}
});
}
//创建数据源
private void initData() {
list=new ArrayList<>();
for (int i = 0; i <100 ; i++) {
list.add("条目"+i);
}
}
//创建适配器
class Myadapter extends RecyclerView.Adapter<Myadapter.Viewholder>{
//listener是设定到Adapter上的,所以Adapter就需要对外开放相关方法:
OnItemClickListener listener;
//设置Item点击监听
public void setOnItemClickListener(OnItemClickListener listener){
this.listener=listener;
}
//Adapter的onCreateViewHolder是负责实例化每个Item的视图,
所以我在实例化视图时就将listener传递给ViewHolder。
@Override
public Viewholder onCreateViewHolder(ViewGroup parent, int viewType) {
View v=View.inflate(MainActivity.this,R.layout.list_item,null);
Viewholder holder=new Viewholder(v);
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//有可能listener传过来的对象是空的,则判断listener不为空,不为空就点击
if (listener!=null) {
listener.onItemClick(view,(int)view.getTag());
}
}
});
return holder;
}
@Override
public void onBindViewHolder(Viewholder holder, int position) {
holder.tv.setText(list.get(position));
holder.itemView.setTag(position);
}
@Override
public int getItemCount() {
return list==null ? 0:list.size();
}
//优化
class Viewholder extends RecyclerView.ViewHolder{
TextView tv;
public Viewholder(View itemView) {
super(itemView);
tv=(TextView)itemView.findViewById(R.id.tv);
}
}
}
OnItemClickListener模仿ListView的OnItemClickListener,开放了view和position两个参数,这对习惯使用ListView
的开发者们使用起来更得心应手。从ViewHolder的代码中可以看到,执行onClick方法时会调用getPosition()将当前
Item的位置回调给listener。getPosition()是ViewHolder的内置方法,可直接使用。
public interface OnItemClickListener{
public void onItemClick(View view,int position);
}
}
package com.qianqian.recyclerview;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
//初始化变量
RecyclerView rv;
List<String> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找控件
rv= (RecyclerView) findViewById(R.id.rv);
initRV();
}
private void initRV() {
//创建数据源
initData();
LinearLayoutManager manager=new LinearLayoutManager(this);
rv.setLayoutManager(manager);
//设置适配器
Myadapter adapter=new Myadapter();
rv.setAdapter(adapter);条目
//适配器的条目点击监听
adapter.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
//在Activity中我们实现了接口方法并在里面打印Toast提示:
Toast.makeText(MainActivity.this,"---"+position,Toast.LENGTH_SHORT).show();
}
});
}
//创建数据源
private void initData() {
list=new ArrayList<>();
for (int i = 0; i <100 ; i++) {
list.add("条目"+i);
}
}
//创建适配器
class Myadapter extends RecyclerView.Adapter<Myadapter.Viewholder>{
//listener是设定到Adapter上的,所以Adapter就需要对外开放相关方法:
OnItemClickListener listener;
//设置Item点击监听
public void setOnItemClickListener(OnItemClickListener listener){
this.listener=listener;
}
//Adapter的onCreateViewHolder是负责实例化每个Item的视图,
所以我在实例化视图时就将listener传递给ViewHolder。
@Override
public Viewholder onCreateViewHolder(ViewGroup parent, int viewType) {
View v=View.inflate(MainActivity.this,R.layout.list_item,null);
Viewholder holder=new Viewholder(v);
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//有可能listener传过来的对象是空的,则判断listener不为空,不为空就点击
if (listener!=null) {
listener.onItemClick(view,(int)view.getTag());
}
}
});
return holder;
}
@Override
public void onBindViewHolder(Viewholder holder, int position) {
holder.tv.setText(list.get(position));
holder.itemView.setTag(position);
}
@Override
public int getItemCount() {
return list==null ? 0:list.size();
}
//优化
class Viewholder extends RecyclerView.ViewHolder{
TextView tv;
public Viewholder(View itemView) {
super(itemView);
tv=(TextView)itemView.findViewById(R.id.tv);
}
}
}
OnItemClickListener模仿ListView的OnItemClickListener,开放了view和position两个参数,这对习惯使用ListView
的开发者们使用起来更得心应手。从ViewHolder的代码中可以看到,执行onClick方法时会调用getPosition()将当前
Item的位置回调给listener。getPosition()是ViewHolder的内置方法,可直接使用。
public interface OnItemClickListener{
public void onItemClick(View view,int position);
}
}