ListView和RecyclerView点击返回顶部
2017-11-24 14:25
357 查看
先说ListView,很简答,废话就不多说了,直接上代码。
布局:
Activity:
OK!
接下来是RecyclerView。
先说怎么点击返回顶部,再讲每个参数的含义。
自条目的布局:
适配器:
Main布局:
MainActivity:
接下来就介绍一下RecyclerView的addOnScrollListener滑动事件:
有两个回调方法
布局:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.bwie.listviewscroll.MainActivity"> <ListView android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="match_parent"> </ListView> <Button android:id="@+id/btn" android:text="顶部" android:textSize="25sp" android:visibility="gone" android:layout_centerHorizontal="true" android:layout_alignParentBottom="true" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout>
Activity:
public class MainActivity extends AppCompatActivity { private ListView mLv; private Button mBtn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initData(); } private void initData() { ArrayList<String> list = new ArrayList<>(); for (int i = 0; i < 80; i++) { list.add("条目" + i); } ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, list); mLv.setAdapter(adapter); mLv.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView absListView, int i) { } @Override public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (firstVisibleItem>=2){ mBtn.setVisibility(View.VISIBLE); }else { mBtn.setVisibility(View.GONE); } } }); mBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (Build.VERSION.SDK_INT>=8){ mLv.smoothScrollToPosition(0);//返回顶部由滑动效果 }else { mLv.setSelection(0);//直接返回顶部 } } }); } private void initView() { mLv = (ListView) findViewById(R.id.lv); mBtn = (Button) findViewById(R.id.btn); } }
OK!
接下来是RecyclerView。
先说怎么点击返回顶部,再讲每个参数的含义。
自条目的布局:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/tv_title" android:textSize="25sp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
适配器:
public class MyAdapter extends XRecyclerView.Adapter<XRecyclerView.ViewHolder> { Context context; List<String> list; public MyAdapter(Context context, List<String> list) { this.context = context; this.list = list; } @Override public XRecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view=View.inflate(context,R.layout.layout_item,null); return new MyViewHolder(view); } @Override public void onBindViewHolder(XRecyclerView.ViewHolder holder, int position) { ((MyViewHolder)holder).tv_title.setText(list.get(position)); } @Override public int getItemCount() { return list!=null?list.size():0; } private static class MyViewHolder extends XRecyclerView.ViewHolder{ TextView tv_title; public MyViewHolder(View itemView) { super(itemView); tv_title=itemView.findViewById(R.id.tv_title); } } }
Main布局:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.bwie.listviewscroll.MainActivity"> <com.jcodecraeer.xrecyclerview.XRecyclerView android:id="@+id/xrv" android:layout_width="match_parent" android:layout_height="match_parent"> </com.jcodecraeer.xrecyclerview.XRecyclerView> <Button android:id="@+id/btn" android:text="顶部" android:textSize="25sp" android:visibility="gone" android:layout_centerHorizontal="true" android:layout_alignParentBottom="true" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout>
MainActivity:
public class MainActivity extends AppCompatActivity { private XRecyclerView mXrv; private Button mBtn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initData(); } private void initData() { List<String> list=new ArrayList<>(); for (int i = 0; i < 100; i++) { list.add("条目"+i); } LinearLayoutManager manager=new LinearLayoutManager(this); mXrv.setLayoutManager(manager); MyAdapter adapter=new MyAdapter(this,list); mXrv.setAdapter(adapter); mXrv.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); LinearLayoutManager layoutManager = (LinearLayoutManager) mXrv.getLayoutManager(); int firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition();//屏幕上显示的第一个条目,从1开始计数 int itemCount = layoutManager.getItemCount();//数据的总数 int childCount = layoutManager.getChildCount();//当前屏幕显示的个数 Log.i("-----------------", "onScrolled: "+firstVisibleItemPosition+"------"+itemCount+"----"+childCount); if (firstVisibleItemPosition>1){ mBtn.setVisibility(View.VISIBLE); }else { mBtn.setVisibility(View.GONE); } } }); mBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (Build.VERSION.SDK_INT>=8){ mXrv.smoothScrollToPosition(0);//返回顶部由滑动效果 } } }); } private void initView() { mXrv = (XRecyclerView) findViewById(R.id.xrv); mBtn = (Button) findViewById(R.id.btn); } }运行一下效果就出来了。
接下来就介绍一下RecyclerView的addOnScrollListener滑动事件:
有两个回调方法
void onScrollStateChanged(RecyclerView recyclerView, int newState): 滚动状态变化时回调 void onScrolled(RecyclerView recyclerView, int dx, int dy): 滚动时回调
1.onScrollStateChanged(RecyclerView recyclerView, int newState)方法
回调的两个变量的含义: recyclerView: 当前在滚动的RecyclerView newState: 当前滚动状态. 其中newState有三种值:
*//** * The RecyclerView is not currently scrolling.(静止没有滚动) *//* public static final int SCROLL_STATE_IDLE = 0; *//** * The RecyclerView is currently being dragged by outside input such as user touch input. *(正在被外部拖拽,一般为用户正在用手指滚动) *//* public static final int SCROLL_STATE_DRAGGING = 1; *//** * The RecyclerView is currently animating to a final position while not under outside control. *(自动滚动) *//* public static final int SCROLL_STATE_SETTLING = 2;
2.onScrolled(RecyclerView recyclerView, int dx, int dy)方法
回调的三个变量含义: recyclerView : 当前滚动的view dx : 水平滚动距离 dy : 垂直滚动距离 dx > 0 时为手指向左滚动,列表滚动显示右面的内容 dx < 0 时为手指向右滚动,列表滚动显示左面的内容 dy > 0 时为手指向上滚动,列表滚动显示下面的内容 dy < 0 时为手指向下滚动,列表滚动显示上面的内容3.canScrollVertically和canScrollHorizontally方法
public boolean canScrollVertically (int direction) 这个方法是判断View在竖直方向是否还能向上,向下滑动。 其中,direction为 -1 表示手指向下滑动(屏幕向上滑动), 1 表示手指向上滑动(屏幕向下滑动)。 public boolean canScrollHorizontally (int direction) 这个方法用来判断 水平方向的滑动 例如: mXrv.canScrollVertically(1)的值表示是否能向下滚动,false表示已经滚动到底部 mXrv.canScrollVertically(-1)的值表示是否能向上滚动,false表示已经滚动到顶部
相关文章推荐
- 当webView作为recyclerView的一个布局,导致点击webView返回顶部的问题。
- ListView和RecyclerView列表点击反馈
- Swift - 点击状态栏使tableView返回顶部(附:状态栏点击事件响应)
- 在使用Imagepicker时候,点击recyclerView的item,进入删除界面,返回结果为空的问题
- 简单利用RecyclerView实现ListView的点击事件
- 精通RecyclerView:打造ListView、GridView、瀑布流;学会添加分割线、 添加删除动画 、Item点击事件
- ListView和RecyclerView列表点击反馈
- RecyclerView嵌套ListView解决点击事件问题
- 设置RecyclerView的位置(点击回到顶部)
- 去除listView和recyclerview滑动到顶部和底部边界的阴影
- android新特性:商城首页一键回到顶部功能实现(包括ListView, RecyclerView 和 ScrollView)
- RecyclerView使用详解一代替ListView(点击事件,添加头布局,上拉刷新下拉加载)
- Listview、RecyclerView中的item中包含可以点击的控件,点击冲突解决办法
- 关于Webview在RecyclerView的第一个条目中,第一次加载时点击回顶部的问题
- listview添加顶部分割线,报错ClassCastException HeaderViewListAdapter,,RecyclerView
- RecyclerView的基本用法 (一个控件实现ListView, GridView等效果)+接口回调点击事件
- 多个tableView点击状态栏返回顶部
- Recyclerview或Listview实时刷新,item点击事件失效的解决方法
- Recyclerview的Item支持可点击可长安类似ListViewOnItemClickListener
- Android recyclerView/listview的点击变色、点击换背景颜色