我建议您使用 aRecyclerView
来代替您的目的。默认支持“Overscroll”动画。
ARecyclerView
在某种程度上与 a 非常相似ListView
,但它使处理动画或强制您使用ViewHolder Pattern
. 此外,它比 a 更灵活ListView
。
但是,在我个人看来,将 a ListView
over aRecyclerView
用于简单的用例仍然可以。
那么创建一个需要哪些步骤呢?
添加依赖项
首先将依赖项添加到您的app.gradle
文件中。您将在搜索菜单下"Gradle Scripts -> build.gradle (Module: app)"
或通过简单地按TAB twice
然后在搜索菜单中输入 gradle 找到此文件(搜索文件时非常有用:))。添加以下依赖项: implementation 'com.android.support:recyclerview-v7:26.1.0'
或者,您可以通过搜索(左上角)将 RecyclerView 从 拖放Designer
到您的布局(可以通过转到您的layout.xml
文件并切换到来找到设计器)。Design Tab
这将自动为您添加依赖项。
创建布局
与 ListView 完全相同(注意:此示例不用ConstraintLayout
作 parent ViewGroup
):
<android.support.v7.widget.RecyclerView
android:id="@+id/rvExample"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
我不知道您当前是否正在使用 a ConstraintLayout
,但您绝对应该检查一下 :)。
适配器解释
public class RecyclerViewAdapter extends RecyclerView.Adapter<ExampleViewHolder> {
private List<String> mData;
private LayoutInflater mInflater;
RecyclerViewAdapter(List<String> data, LayoutInflater inflater) {
mData = data;
mInflater = inflater;
}
@Override
public ExampleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ExampleViewHolder(mInflater.inflate(R.layout.my_layout, parent, false));
}
@Override
public void onBindViewHolder(ExampleViewHolder holder, int position) {
holder.getTvText().setText(mData.get(position));
}
@Override
public int getItemCount() {
return mData.size();
}
}
onCreateViewHolder:正如它已经说过的ViewHolder
,必须创建一个新的。每次滚动时屏幕上弹出新项目时都不会调用此方法!
onBindViewHolder:ViewHolder
必须更新给定 as 参数的数据。
getItemCountRecyclerView
:这包括多少个项目?
视图持有者
class ExampleViewHolder extends RecyclerView.ViewHolder {
private TextView mTvText;
public ExampleViewHolder(View itemView) {
super(itemView);
mTvText = itemView.findViewById(R.id.tv_text);
}
public TextView getTvText() {
return mTvText;
}
}
在那里,您只需提取视图,以便在onBindViewHolder
调用方法时更新它们。它的布局:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="56dp">
<TextView
android:id="@+id/tv_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</android.support.constraint.FrameLayout>
完成
现在您只需将 aLayoutManager
和 an设置Adapter
为您的RecyclerView
和瞧!LayoutManager
简单地告诉这些RecyclerView
项目应该如何排列。好的,现在让我们完成:
mRvExample.setHasFixedSize(true); //set this if every item has the same size - performance gain
mRvExample.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
mRvExample.setAdapter(new RecyclerViewAdapter(Arrays.asList("asdf","asdfsdf"), getLayoutInflater());
虽然我无法使用 a 直接解决您的问题,但ListView
我希望我仍然能够帮助您。由于我不知道您处于哪个级别,所以我希望包含有关如何设置基本RecyclerView
. 您应该查看它以获得更深入的理解的有用链接是:
基础描述:
https ://developer.android.com/training/material/lists-cards.html
谈论进入动画:
https ://proandroiddev.com/enter-animation-using-recyclerview-and-layoutanimation-part-1-list-75a874a5d213
添加onClick:RecyclerView onClick
使用 Kotlin:https ://antonioleiva.com/recyclerview-adapter-kotlin/
物品装饰:https ://www.bignerdranch.com/blog/a-view-divided-adding-dividers-to-your-recyclerview-with-itemdecoration/
Pro RecyclerView 演讲:https ://www.youtube.com/watch?v=KhLVD6iiZQs