简单利用RecyclerView实现ListView的点击事件
2017-10-08 10:10
651 查看
首先点击file-->project-->选中新创建的工程-->dependencies-->点击“+”号-->选中第一个-->找到recyclerview-v7 (com.android.support:recyclerview-v7:25.3.1)-->ok
接着创建布局:
public class MainActivity extends AppCompatActivity {
RecyclerView rv;
List<String> list=new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rv= (RecyclerView) findViewById(R.id.rv);
//模拟假数据
for(int i=0;i<100;i++){
list.add("条目"+i);
}
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) {
Toast.makeText(MainActivity.this,"------"+position,Toast.LENGTH_LONG).show();
}
});
}
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
//利用接口回调实现点击事件
OnItemClickListener listener;
public void setOnItemClickListener(OnItemClickListener listener){
this.listener=listener;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//加载布局
View view=View.inflate(MainActivity.this,R.layout.item,null);
//每次点击时都会调用此方法
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//有可能传过来的listener为null
if(listener!=null){
//view为每次点击时的条目
//view.getTag()获得条目下标position
listener.OnItemClick(view,(int)view.getTag());
}
}
});
//返回加载的视图
return new LeftViewHolder(view);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
//为每个条目赋值
((LeftViewHolder)holder).tv.setText(list.get(position));
//把条目的下标position设置给holder
holder.itemView.setTag(position);
}
@Override
public int getItemCount() {
//用三元表达式 如果集合list为空的话返回数目为零否则返回集合数目
return list!=null?list.size():0;
}
public class LeftViewHolder extends RecyclerView.ViewHolder{
TextView tv;
public LeftViewHolder(View itemView) {
super(itemView);
tv=itemView.findViewById(R.id.tv);
}
}
}
public interface OnItemClickListener{
public void OnItemClick(View view,int position);
}
}
接着创建布局:
<android.support.v7.widget.RecyclerView android:id="@+id/rv" android:layout_width="match_parent" android:layout_height="match_parent" />
public class MainActivity extends AppCompatActivity {
RecyclerView rv;
List<String> list=new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rv= (RecyclerView) findViewById(R.id.rv);
//模拟假数据
for(int i=0;i<100;i++){
list.add("条目"+i);
}
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) {
Toast.makeText(MainActivity.this,"------"+position,Toast.LENGTH_LONG).show();
}
});
}
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
//利用接口回调实现点击事件
OnItemClickListener listener;
public void setOnItemClickListener(OnItemClickListener listener){
this.listener=listener;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//加载布局
View view=View.inflate(MainActivity.this,R.layout.item,null);
//每次点击时都会调用此方法
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//有可能传过来的listener为null
if(listener!=null){
//view为每次点击时的条目
//view.getTag()获得条目下标position
listener.OnItemClick(view,(int)view.getTag());
}
}
});
//返回加载的视图
return new LeftViewHolder(view);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
//为每个条目赋值
((LeftViewHolder)holder).tv.setText(list.get(position));
//把条目的下标position设置给holder
holder.itemView.setTag(position);
}
@Override
public int getItemCount() {
//用三元表达式 如果集合list为空的话返回数目为零否则返回集合数目
return list!=null?list.size():0;
}
public class LeftViewHolder extends RecyclerView.ViewHolder{
TextView tv;
public LeftViewHolder(View itemView) {
super(itemView);
tv=itemView.findViewById(R.id.tv);
}
}
}
public interface OnItemClickListener{
public void OnItemClick(View view,int position);
}
}
相关文章推荐
- RecyclerView的基本用法 (一个控件实现ListView, GridView等效果)+接口回调点击事件
- RecyclerView添加点击和长按事件的简单实现
- 利用RecycleView实现类似ListView的Item点击,长按等操作事件以及点击后每一项在添加一个列表
- 安卓中RecyclerView的简单使用和自定义RecyclerView的接口点击监听事件
- [置顶] Android开发之RecyclerView实现点击事件和长按事件
- Recyclerview实现瀑布流布局及条目的点击事件
- 利用RecyclerView实现listview布局
- RecyclerView的简单实用和点击事件
- RecyclerView进阶(二)点击事件的实现
- Android购物车的实现,仿淘宝天猫京东等APP。处理RecyclerView或listview中的选中事件;
- Recyclerview或Listview实时刷新,item点击事件失效的解决方法
- 简单的实现listView中item多个控件以及点击事件
- RecyclerView点击事件OnItemClick的两种实现方式
- 安卓交互之ListView,GirdView,RecyclerView三者的简单实现
- RecyclerView实现上拉刷新,下拉加载,item点击事件
- Android实现RecyclerView自定义列表、点击事件以及下拉刷新
- android TV开发:使用RecycleView实现横向的Listview并响应点击事件
- 详解Android中回调机制与RecyclerView的Item点击事件实现
- RecyclerView 实现瀑布流及点击事件,含点击回调的接口
- Android RecyclerView的Item点击事件实现整理