Android 文档中没有关于 RecyclerView 和 StaggeredGridLayoutManager 的好例子

2023-12-01

我找不到更好的使用示例RecyclerView with StaggeredGridLayoutManager。甚至不在安卓文档.

Q1.我需要一些例子来正确解释如何使用RecyclerView with StaggeredGridLayoutManager.

Q2.谁能告诉我是否可以使用以下命令创建以下布局RecyclerView with StaggeredGridLayoutManager

example

到目前为止我已经找到了这个link这根本没有用。

我也发现了这个link对于cardslib,但它的实现太复杂并且有太多的依赖关系,这会不必要地增加我的应用程序大小。


对于那些仍在解决这个问题的人。

您可以根据需要修改以下代码:
首先添加Android RecyclerView和CardView的依赖库

compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:cardview-v7:23.4.0'
compile 'com.android.support:recyclerview-v7:23.4.0'

您的主要活动布局活动_main.xml就像

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="7dp"
    tools:context=".MainActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="vertical" />

</RelativeLayout>


在名为的布局文件中定义卡片的布局book_list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
card_view:cardUseCompatPadding="true">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white"
    android:orientation="vertical">

    <TextView
        android:id="@+id/BookName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="5dp"
        android:textColor="@android:color/black"
        android:textSize="16sp" />

    <TextView
        android:id="@+id/AuthorName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_below="@+id/country_photo"
        android:background="#1976D2"
        android:gravity="center_horizontal"
        android:paddingBottom="8dp"
        android:paddingTop="8dp"
        android:text="@string/hello_world"
        android:textColor="#ffffff"
        android:textSize="13sp" />
</LinearLayout>

</android.support.v7.widget.CardView> 


将此布局定义为一个类项目对象.java

public class ItemObject
{
    private String _name;
    private String _author;

    public ItemObject(String name, String auth)
    {
        this._name = name;
        this._author = auth;
    }

    public String getName()
    {
        return _name;
    }

    public void setName(String name)
    {
        this._name = name;
    }

    public String getAuthor()
    {
        return _author;
    }

    public void setAuthor(String auth)
    {
        this._author = auth;
    }
}


定义自定义适配器RecyclerView 适配器示例填充卡片

public class SampleRecyclerViewAdapter extends RecyclerView.Adapter<SampleViewHolders>
{
    private List<ItemObject> itemList;
    private Context context;

    public SampleRecyclerViewAdapter(Context context,
        List<ItemObject> itemList)
    {
        this.itemList = itemList;
        this.context = context;
    }

    @Override
    public SampleViewHolders onCreateViewHolder(ViewGroup parent, int viewType)
    {
        View layoutView = LayoutInflater.from(parent.getContext()).inflate(
            R.layout.book_list_item, null);
        SampleViewHolders rcv = new SampleViewHolders(layoutView);
        return rcv;
    }

    @Override
    public void onBindViewHolder(SampleViewHolders holder, int position)
    {
        holder.bookName.setText(itemList.get(position).getName());
        holder.authorName.setText(itemList.get(position).getAuthor());
    }

    @Override
    public int getItemCount()
    {
        return this.itemList.size();
    }
}


我们还需要为每个项目对象。所以定义一个类样品视图持有者

public class SampleViewHolders extends RecyclerView.ViewHolder implements
    View.OnClickListener
{
    public TextView bookName;
    public TextView authorName;

    public SampleViewHolders(View itemView)
    {
        super(itemView);
        itemView.setOnClickListener(this);
        bookName = (TextView) itemView.findViewById(R.id.BookName);
        authorName = (TextView) itemView.findViewById(R.id.AuthorName);
    }

    @Override
    public void onClick(View view)
    {
        Toast.makeText(view.getContext(),
            "Clicked Position = " + getPosition(), Toast.LENGTH_SHORT)
            .show();
    }
}

Now in 主要活动,将 StaggeredGridLayoutManager 的实例分配给 recycler_view 来定义组件的显示方式。
还使用实例填充卡片RecyclerView 适配器示例, 如下

public class MainActivity extends AppCompatActivity
{
    private StaggeredGridLayoutManager _sGridLayoutManager;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
        recyclerView.setHasFixedSize(true);

        _sGridLayoutManager = new StaggeredGridLayoutManager(2,
            StaggeredGridLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(_sGridLayoutManager);

        List<ItemObject> sList = getListItemData();

        SampleRecyclerViewAdapter rcAdapter = new SampleRecyclerViewAdapter(
            MainActivity.this, sList);
        recyclerView.setAdapter(rcAdapter);
    }

    private List<ItemObject> getListItemData()
    {
        List<ItemObject> listViewItems = new ArrayList<ItemObject>();
        listViewItems.add(new ItemObject("1984", "George Orwell"));
        listViewItems.add(new ItemObject("Pride and Prejudice", "Jane Austen"));
        listViewItems.add(new ItemObject("One Hundred Years of Solitude", "Gabriel Garcia Marquez"));
        listViewItems.add(new ItemObject("The Book Thief", "Markus Zusak"));
        listViewItems.add(new ItemObject("The Hunger Games", "Suzanne Collins"));
        listViewItems.add(new ItemObject("The Hitchhiker's Guide to the Galaxy", "Douglas Adams"));
        listViewItems.add(new ItemObject("The Theory Of Everything", "Dr Stephen Hawking"));

        return listViewItems;
    }
}

Output will look something like this Two Colums Output

For your requirement, you can incorporate an ImageView in book_list_item.xml and populate it accordingly in SampleViewHolders
Also note, to change number of columns from 2 to 3.

You could change declaration in MainActivity as

_sGridLayoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL);
recyclerView.setLayoutManager(_sGridLayoutManager);

Which will give an output like this Three Column Output

Here's 另一个简单的教程

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 文档中没有关于 RecyclerView 和 StaggeredGridLayoutManager 的好例子 的相关文章

  • 如何在android中点击画布上绘制的圆圈?

    我正在开发一个人脸检测应用程序 在这个应用程序中 我必须在脸上的眼睛和嘴巴用户可以点击拖动圆圈 在检测到的人脸上根据自己设置位置 因此 所有圆圈都已成功绘制在脸上 但我无法单击特定圆圈并使用缩小选项在整个脸上移动 请建议我有关相同问题的正确
  • Whatsapp 在 Android 中共享音频文件时正在剪切音频文件

    我在共享格式不是 mp3 的音频文件时遇到问题 文件被共享 但长度较短 例如 如果文件有 10 秒 则仅共享 5 秒 如果我使用 mp3 格式 它会完全共享 但其他格式会出现问题 注意 该文件在其他应用程序 如Messenger 中共享没有
  • 如何使用 Android 版 Facebook 同步的联系人图片

    我的手机上安装了 Android 版 Facebook 它会自动将联系人列表中人员的 FB 个人资料图片同步到我的手机 我想在我访问的应用程序中使用这些图片ContactsContract PhoneLookup 我真的需要 Faceboo
  • Android,让文本切换器成为中心?

    如何集中我的文本切换器 我尝试过设置重力 但似乎不起作用 ts setFactory new ViewFactory public View makeView TextView t new TextView this t setTypefa
  • 相当于Android中的javax.swing.Timer

    有没有类似的东西javax swing Timer在安卓上 我知道如何创建自己的线程 但是有类似摆动计时器的东西吗 您可能正在寻找课程android os CountDownTimer http developer android com
  • 如何在 Android 中创建刮刮卡?

    我需要为我在学校的期末项目创建一个 刮刮卡 应用程序 但找不到如何实现刮刮事件的方法 如何创建背景图像并在其上放置灰色矩形 所以当我刮刮这些矩形时我会看到他们下面的图片 实现必须在 Android 中 因为我还不知道如何在 Objectiv
  • PhoneGap 是应用程序开发的好选择吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Android,语言文件不起作用

    我现在正在创建一个 Android 应用程序 并尝试为我的母语添加语言文件 但在某种程度上 这对我不起作用 我尝试在两部不同的手机中加载该应用程序 但结果相同 之前创建过语言文件 效果良好 但这次不行 手机设置为瑞典语 语言文件适用于我创建
  • 在 Android 中关闭 Spinner 中的下拉菜单

    在 Android 中打开和关闭微调器时 我需要为箭头图标设置动画 打开微调器时我可以旋转箭头 我只是放了一个setOnTouchListener on the Spinner 当下拉菜单关闭或隐藏时 问题就来了 因为我不知道如何在该操作上
  • Android Things 文件系统

    我正在 Android 上构建这个应用程序 我希望能够让它访问 U 盘上的媒体文件 甚至树莓派的 SD 卡上的媒体文件 我还不知道我将如何处理这些文件 但我只是想知道它是否可能 如果不是这样也没关系 我还有其他解决方案 但我想我会先从明显的
  • 用于代码生成的 ANTLR 工具版本 4.7.1 与当前运行时版本 4.5.3 不匹配

    我正在开发一个 Android 应用程序 当前使用 DSL 和一些库 突然构建给了我这个错误 任务 app kaptDebugKotlin 失败 用于代码生成的 ANTLR 工具版本 4 7 1 与当前运行时版本 4 5 3 不匹配 用于解
  • 如何在代码中设置TextView的文字颜色?

    在 XML 中 我们可以通过以下方式设置文本颜色textColor属性 比如android textColor FF0000 但如何通过编码来改变它呢 我尝试过类似的东西 holder text setTextColor R color R
  • 来自外部 XML 的 Android 本地化

    是否可以使用从服务接收到的 XML 在运行时翻译 Android 应用程序 如果可能的话 请有人指出我正确的方向 谢谢 Warning 我读到的所有内容都表明 让您的应用程序更改语言不是一个好主意 因为 Android 框架不支持它 并且可
  • UnsupportedOperationException:特权进程中不允许使用 WebView

    我在用android sharedUserId android uid system 在我的清单中获得一些不可避免的权利 从 HDMI 输入读取安卓盒子 http eweat manufacturer globalsources com s
  • 改造Android基本且简单的问题

    我的服务器返回简单的 Json 结果 如下所示 message Upload Success 我正在尝试将结果放入改造模型类中 public class MyResponse SerializedName message String me
  • 在Android的activity中调用onResume

    在活动的过程中通过调用 this OnResume 强制 onResume 事件可以吗 或者我应该实现另一个由 OnResume 和第一个成员调用的过程 实现在您的重写中调用的另一个过程onResume 后者不打算由您调用 它是一种方便的方
  • 在Android中提取视频帧

    我想知道是否可以从 Android 中正在运行的视频中提取帧 我需要定期提取帧并将其发送以进行进一步处理 有人能为我找到答案吗 Thanks Abhi 您可以使用媒体元数据检索器 http developer android com ref
  • TYPE_ACCELEROMETER 和 TYPE_LINEAR_ACCELERATION 传感器有什么区别?

    I think TYPE ACCELEROMETER显示设备加速 但是 我不明白什么时候应该使用TYPE LINEAR ACCELERATION 我需要计算移动设备的速度 哪种传感器适合此应用 另外 我读到TYPE LINEAR ACCEL
  • RecyclerView元素更新+异步网络调用

    我有一个按预期工作的回收视图 我的布局中有一个按钮可以填充列表 该按钮应该进行异步调用 根据结果 我更改按钮的外观 这一切都发生得很好 但是 当我单击按钮并快速向下滚动列表时 异步调用的结果会更新新视图的按钮 代替旧视图的视图 我该如何处理
  • 将数据放入短信发送意图中?

    我想发送短信 如果文字太长 我会将其分成多条消息 我试图将一些额外的信息放入 已发送 意图中 以了解哪个部分已发送 以及所有部分何时完成 ArrayList

随机推荐

  • 具有继承列表的自动映射器

    仅供参考 这与这个问题不同自动映射器以及从集合或列表继承 这是我继承的列表 public class MyPagedList
  • 在模拟器中使用 Google 登录按钮时出现问题

    当我单击 Google 登录按钮时 它会显示以下对话框 我单击 更新 但没有任何反应 但我的 logcat 给出了以下输出 01 24 07 38 48 121 W GooglePlayServicesUtil 1305 Google Pl
  • 日期时间差异

    我有2个变量 GMDCOMTM which stores the date time Tue Oct 1 13 32 40 2013 GMDRRSTM which stores the date time Tue Oct 2 23 35 3
  • 值参数的常量正确性

    我知道关于 const 正确性的问题很少 其中指出函数的声明及其定义不需要就值参数达成一致 这是因为值参数的常量仅在函数内部重要 这可以 header int func int i cpp int func const int i retu
  • [Passportjs][Angular5] 请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许访问原点“null”

    我正在尝试将 Nodejs 后端 api 与 Angular 集成 我在后端应用程序上实施了 passpor google passport github passport twitter 策略 我的后端应用程序网址是http localh
  • 成形的 iframe 可能吗?

    是否可以使用六边形 菱形或长方形或正方形以外的任何形状的 iframe 或者甚至可能是一个 div 你可以用 CSS mask 来伪造它 但它的一部分会被它遮盖 你不能使iframe将其内容呈现在这些形状之一内
  • 如何在 shell 脚本中对整数比较进行逻辑或运算?

    我正在尝试进行简单的条件检查 但似乎不起作用 If 等于0或大于1然后打个招呼 我尝试过以下语法但没有成功 if 0 o gt 1 then echo hello fi if 0 gt 1 then echo hello fi 这应该有效
  • Stream 的复用是否是流的副本

    例如 有一个带密钥的流 val keyedStream KeyedStream event Key env addSource keyBy several transformations on the same stream keyedSt
  • 无法理解输出的原因

    我正在运行一个代码片段 但我无法理解代码及其产生的输出 include
  • 使用 HTTPS 的 HttpGet:SSLPeerUnverifiedException

    Using Http客户端 当我尝试通过 HTTPS 进行通信时收到以下错误 线程 main 中出现异常 javax net ssl SSLPeerUnverifiedException 对等点未经过身份验证 这是我的代码 URI logi
  • javafx,如何实现confirmHandler?

    我正在使用 javafx 的网络引擎来显示网页 在页面上 有一个脚本调用window confirm 我已经知道如何设置确认处理程序以及如何显示类似模式的对话框 我的问题是如何在处理程序返回之前获得用户的选择 webEngine setCo
  • JSF 2:ajax 调用后页面重定向

    我陷入了类似的导航案例问题this一 简而言之 我正在尝试使用 ajax 渲染将导航从一个页面重定向到另一个页面h commandLink 这是支持 bean ManagedBean public class StartBean publi
  • OffscreenCanvas 无法克隆,因为它已分离

    昨天又回到了我对 HTML canvas 的爱好 并尝试在单独的线程中进行渲染 只是在控制台中面临以下错误 未捕获的 DOMException 无法在 Worker 上执行 postMessage 无法克隆 OffscreenCanvas
  • AppStore语言描述和“本地化原生开发区域”

    一款以三种语言 英语 意大利语和西班牙语 本地化的 iPhone 应用程序已提交至 AppStore 并附有三种语言的说明和屏幕截图 结果是 在 AppStore USA 中有英语描述 在 AppStore Spain 有西班牙语描述 在
  • 观察 UITableView 中的捏合多点触控手势

    我正在寻找在 UITableView 之上实现捏入 捏出 我已经研究了几种方法 包括这个 类似问题 但是虽然我可以创建一个UIViewTouch对象并将其覆盖到我的 UITableView 上 滚动事件不会转发到我的 UITableView
  • 关于Apple的KMLViewer placemarkDescription和注释字幕

    在我的应用程序中 我使用 Apple 的 KMLViewer 来显示从 KML 文件获取的注释 在文件 KMLParser m 中 有一个实例变量 placemarkDescription它将描述标签下的信息从 kml 文件转换为注释副标题
  • 将 `.klib` 库添加到 kotlin 多平台

    我想知道如何将我的 cinterop ted 库导入到 kotlin 多平台构建的 gradle 构建中 我已经创建了library def文件并填充它 我还生成了library klib以及随之而来的文件夹 我只是不明白如何将其导入到gr
  • 名称为 char[] 的变量

    如何在 C 中使用 char 表中指定的名称创建变量 就像是 char name gets name int name 0 我希望你明白我的意思 C 与您可能习惯的 Python 或 Ruby 等脚本语言不同 C 是编译而不是解释的 在运行
  • 使用replaceall输出错误

    为什么我从以下代码中得到 AAAAAAAAA 而不是 1A234A567 String myst 1 234 567 String test myst replaceAll A System out println test 任何想法 尝试
  • Android 文档中没有关于 RecyclerView 和 StaggeredGridLayoutManager 的好例子

    我找不到更好的使用示例RecyclerView with StaggeredGridLayoutManager 甚至不在安卓文档 Q1 我需要一些例子来正确解释如何使用RecyclerView with StaggeredGridLayou