- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在我的程序中使用了 RecyclerView
,并且遇到了一些小问题,我相信你们中的一些人已经遇到并解决了所有这些问题..
分隔符颜色
:使用DividerItemDecoration.java显示项目之间的分隔符,但如果我想更改分隔线颜色(例如:默认为白色),我不知道在哪里进行更改
可点击行
:只有当我点击一行中的文本时,点击才有效,但我想允许用户点击一行中的任意位置(例如: ListView )以下 this链接
Wrap RecyclerView
:我在 recyclerview 中只有两条记录,但它占用了整个高度(我想根据 RecyclerView 中的记录来包装它,例如:listview)
Ripple Effect
:每当我点击 RecyclerView 中的任何项目时都没有获得 RippleEffect,而当我单击列表项时获得 Ripple Effect
RecyclerView 项目动画
:当我点击 RecyclerView 中的任何项目时,如何实现动画
fragment_main.xml:-
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/btn_rounded"/>
adapter_main.xml:-
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/textTitle"
style="@style/AppTheme.ListTextView"
/>
</LinearLayout>
styles.xml:-
<style name="AppTheme.ListTextView" parent="android:Widget.Material.TextView">
<item name="android:gravity">left</item>
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:padding">10dp</item>
</style>
btn_rounded.xml:-
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#008f8471"/>
<stroke android:width="2dp" android:color="#ffffff" />
<corners android:radius="10dp"/>
</shape>
MainAdatper.java:-
@Override
public void onBindViewHolder(MainHolder holder, final int position) {
.....
holder.mRootView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String strTitle = list.get(position).getTitle().toString();
Intent intent = new Intent(context, DetailActivity.class);
intent.putExtra("title", strTitle);
context.startActivity(intent);
}
});
MainFragment.xml:-
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_main, container, false);
/* Initialize recycler view */
mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
mRecyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST));
list = new ArrayList<MainPoho>();
adapter = new MainAdapter(getActivity(), list);
mRecyclerView.setAdapter(adapter);
.......
}
最佳答案
1.
首先,创建一个可绘制的 xml 文件来表示分隔线,如下所示:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/white" /> <!-- or you could use hex i.e. #ffffff -->
<size android:height="1dp" />
</shape>
然后将该分隔线设置为您的 DividerItemDecoration
,如下所示:
new DividerItemDecoration(getResources().getDrawable(R.drawable.recycler_divider))
2.
没有看到你如何膨胀你的 ViewHolder
我不知道 mRootView
真正代表什么,但这是我通常采用的方法。我会像您一样创建项目 View ,但有一些更改:
<?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="wrap_content"
android:orientation="vertical"
android:background="?attr/selectableItemBackground">
<!-- This will give your recycler item the ink ripple effect and touch state -->
<TextView
android:id="@+id/textTitle"
style="@style/AppTheme.ListTextView"
/>
</LinearLayout>
然后在您的 onBindViewHolder(...)
方法中,您需要将 OnClickListener
设置为 itemView
中的对象持有人像这样:
@Override
public void onBindViewHolder(MainHolder holder, final int position) {
.....
holder.itemView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String strTitle = list.get(position).getTitle().toString();
/**
* Here is where I would typically create a java interface to use as a
* callback to the fragment/activity/whatever to take action rather
* than keeping this code in the adapter
*/
Intent intent = new Intent(context, DetailActivity.class);
intent.putExtra("title", strTitle);
context.startActivity(intent);
}
});
}
这应该让您将整个单元格用作可点击区域 + 涟漪效果。
3.
让 RecyclerView 垂直包装它的内容有点棘手。您必须子类化 LinearLayoutManager
并覆盖它的 onMeasure(...)
方法以强制它包装它的内容。请参阅此处的帖子:https://stackoverflow.com/a/27616854/1623828
4.
请参阅我对 #2 的回答。您必须将要设置 OnClickListener
的 View 的背景(或前景)设置为值 ?attr/selectableItemBackground
或 ?attr/selectableItemBackgroundBorderless
如果你想让涟漪超出 View 的范围。此值将在 5.0+ 上使用墨水波纹选择器,并且在任何较低的平台上将默认为您的标准无波纹选择器。但是,您可以创建自己的自定义波纹可绘制对象,但这会涉及更多一些。
文档:http://developer.android.com/training/material/animations.html#Touch
5.
什么样的动画?比如,RecyclerView 项目动画?对于那些你可以通过子类化 ItemAnimator 创建你自己的动画并使用这个 method 应用它:
mRecyclerView.setItemAnimator(...)
或者您可以使用 default implementation :
mRecyclerView.setItemAnimator(new DefaultItemAnimator())
Otherwise 您的意思是使用 Activity Transitions 在 Activity 之间制作动画吗?如果是这样,您可以按照文档 here 进行操作 来设置 Activity Transitions,但它们仅适用于 Android 5.0+
关于android - RecyclerView 面临的小问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28935631/
我正在安装一个 react-app 并面临一些问题。我试图通过删除 /node-modules 来修复它并重新安装,但它仍然给我一些问题。我是一个 ubuntu 用户。请帮我解决一下这个。这是错误日志
首先,我是 C 的初学者,所以如果我的问题看起来很愚蠢,我很抱歉。 我正在学习如何在 C 中使用冒泡排序算法,我通过以下代码: #include int main() { int ctr,
我正在使用 HtmlUnitDriver 打开链接。这是我的代码: HtmlUnitDriver webDriver = new HtmlUnitDriver(); webDriver.get("so
我是 Camel 新手,我已经为分离器编写了代码。我编写了一个 context.xml,其中包含用于映射 POJO 的路由和 Bean,以及一个 FileSplitter.java 文件,其中包含以下
我不断收到错误:TestException.java:8: 错误: 未报告的异常 Throwable;必须被捕获或宣布被抛出 throw new ParentException().initCause
您能看一下this demo吗?让我知道为什么我无法定位所选 anchor 链接的下一个和上一个 section 的 id? 为了获得下一个,我尝试了所有 var target = $(this).
我正在为我们使用 asp.Net MVC 的应用程序尝试 JqGrid。我无法获得数据显示。我不确定是什么问题。 这是我的查看代码: @{ ViewBag.Title = "Sea
我想将网页显示为模式弹出窗口。 Response.Write("detailedresults=window.showModalDialog('NewFile.aspx','Data','left=(
当我尝试从不同域下载视频时,遇到 CORS 错误。我尝试了很多方法来解决它但无法解决。下面是我的js代码。 getVideoFile = function () { var xhr = new XML
我的 ADF Web 应用程序面临兼容性问题。尝试添加元标记 - ' '甚至尝试注入(inject)java脚本来抑制兼容性问题,但没有任何反射(reflect)。下面是java脚本- ` var
在这个项目中,我遇到了一些运行时错误,我厌倦了通过将错误粘贴到谷歌中来解决它并为此获得适当的结果。但是我无法解决这个问题, 和其他代码很好但是 list 文件显示了一些警告。代码是 `
我实现了一个具有三个选项卡的 TabLayout。当我滑动页面时一切正常,当我只使用标签点击来导航时它也有效。但是,当我滑动页面并单击任何先前选择的选项卡时,问题就出现了,只有选项卡指示器更改为新选项
我想要达到的目标:尝试将数据从我的应用程序字段发送到我在 WebAppServer 上的 Servlet。 我面临 ClassCastException 问题,我尝试实现我在相关讨论中在 StackO
JavaScript 代码: if (document.getElementsByClassName('chkaddress').checked) { $('#DivCommunication
我正在尝试使用 Hazelcast 来使用 SqlPredicate。代码片段: private void testHazelCast() { HazelcastInstance ha
当我从服务器访问图像时,收到 403 禁止错误。 如果我访问音频文件,那么我不会收到任何错误。但如果我正在访问图像文件,那么只有我面临这个问题。 请注意,音频文件的权限是0644,图像的权限也具有相同
我想像sql中的通配符搜索一样执行查询。所以我在nodejs和mongoose中使用正则表达式。当我使用硬代码时它可以工作,但是当我放入变量时它就不起作用。问题出在哪里。 硬代码代码 AlertMod
我正在尝试将 BottomNavigationView 与导航编辑器一起使用。我已经按照给定的方式实现了所有内容,但只显示主页,当我更改选项卡时,它不会更改 fragment 。 这是主要的 Acti
这个问题在这里已经有了答案: Enzyme: simple .to.have not working (1 个回答) 10 个月前关闭。 我有一个组件app.tsx import React, { u
我有多个选项卡(A、B、C),并且在加载“C”选项卡时,模型属性应数据绑定(bind)到选项卡“c”。我面临数据绑定(bind)问题。 三个选项卡(A、B、C)位于另一个 View View A 内。
我是一名优秀的程序员,十分优秀!