我正在使用Java创建一个Android应用程序,该应用显示一个问题和3或4个选项(MCQ App).我已经使用了带有XML中文本视图的Recyclerview来存储问题. 但是,由于这些部分是动态的,我对如何为选项部分创建单选按钮/复选框感到困惑.意思是,根据数据库中的条目,一个问题可能具有1到6的单选按钮.另外,根据DB条目,很少有问题可能具有复选框而不是单选按钮. 由于这些是在运行时确定的,因此我无法将这些radiobuttons/复选框保存在XML文件中.最初,我尝试在OnBindViewHolder方法中创建它们,但是这样做会大大减慢滚动的速度,因为该方法即使在滚动时也会被调用.由于这是一个非常常见的用例,因此我想相信该框架必须可以随时可以发现的解决方案. 我不想添加所有可能的radiobuttons/复选框,并播放运行时的可见性. 解决方案 您可以创建XML文件为 -
以下是关于 android-recyclerview 的编程技术问答
我只想制作一项不可回收的视图持有人,而不是整个视图持有人.我该怎么办? 我不希望btnSave可回收,因为它的状态可能在每一行都不同. 这是我到目前为止所做的代码: public static class AlertViewHolder extends RecyclerView.ViewHolder { TextView tvTitle, tvDescription; Button btnLink, btnSave; AlertViewHolder(View itemView) { super(itemView); tvTitle = (TextView) itemView.findViewById(R.id.tvTitle); tvDescription = (TextView) itemView.findViewById(R.id.tvDescription); btnLink =
基本上,我有一个带有一个适配器的回收库,可从光标中填充数据.我有两个选项可以获取项目动画: 使用setHasStableIds(true)和Override getItemId返回数据库行的ID,然后在适配器中使用swapCursor函数,将其当前光标与新的光标交换,然后调用notifyDatasetChanged 类似于选项1,而是在旧光标和新光标上进行迭代,而不是简单地交换光标并调用notifyDatasetChanged,而是比较确定已添加/删除/删除/更改哪个行的行,并跟踪他们,然后致电notifyItemAdded,notifyItemChanged等 使用选项1,notifyDatasetChanged将重新绑定所有可见的项目(和其他一些内容),但效率低,但是,对于选项2,我必须循环整个光标,以找出已添加了哪些项目/已删除,如果光标相当大,这也可能需要一些时间.有人对哪个更好的解决方案有任何想法吗? 为什么 编辑: 要使事情变得更加有趣,我也有第三
我有一个从JSON响应中填充的项目. public class UserProfile extends AppCompatActivity { private UserData userData; private ProfileNewsFeedAdapter adapter; private ArrayList list; private RecyclerView profileNewsFeed; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.user_profile_activity); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportA
在性能方面 每个具有不同对象列表的多个适配器 布局, 使用不同数据处理的单个适配器. 让我们假设我们需要创建 评论, 视频, 问题 在适配器中列出以正确显示数据.每个列表属于不同的布局,因此我们有不同的TextViews,ImageViews等. 公共类FileSadapter扩展了RecyClerview.Adapter { 公共静态最终int video_files_adapter = 1; 公共静态最终int comment_adapter = 2; 公共静态最终int问题_adapter = 3; 私有int current_adapter; 私人列表视频; 私人列表评论; 私人清单问题; 布尔人Isforuser; public fileAdapter(int currentAdapter,列表视频,布尔iSforuser){ this.videofiles = videofiles; this.curren
我有一个简单的测试应用程序,该应用具有类似社交媒体的布局: 它由帖子和嵌套RV的外部回收视图组成(屏幕截图上有凹痕). 问题: 大多在调试模式下,只有在初始滚动发生(可能是RV的某些初始化内容)时,才有相当大的Jank .在调试和释放中,进一步的滚动都很顺畅.在发行中,它主要发生在使用一些密集应用程序之后,例如在Facebook应用程序上观看视频.如果释放发生在释放中,那么詹克就不太明显. systrace初始滚动发生时 设置详细信息 电话 - Nexus 5X与Android 8.1, compilesdkversion -28, Minsdkversion -16, targetsdkversion -28 相关的代码片段如下: if (viewHolders.size == 0) { //Log.w("msg", "creating all view holders") for (i in 1..10) { val v = LayoutInfla
我有一个可回路,能够在屏幕上显示最多3个项目,但是它拨打了列表中所有45个项目的OnCreateviewholder和OnBindViewHolder,allist aill(如下日志中). 中. 当我滚动这些项目到屏幕时,不应该调用这些方法吗? *我正在使用带有0和1的列表作为测试,以定义应使用哪种布局. 我的适配器代码 public class MyRecyclerAdapter extends RecyclerView.Adapter { int[] post_list; private static final int TYPE_0 =0; private static final int TYPE_1=1; private LayoutInflater inflater; private Context context; Activity mActivity; public MyRecyclerAd
我正在尝试创建一个带有项目列表的布局,其中最后一个项目是添加"标准"类型的新项目的按钮.它应该像Google保持列表一样,在列表的末尾带有永久的"添加"项目. Google keep new List示例 我尝试了两种实现它的方法.第一个非常简单,但我发现一个问题.第二个不是那么简单,而且性能更糟.此外,我认为我以第二种方式使用RecyclerView的方式,我认为由于此,我可以找到性能问题. 您将如何做? 第一种方式 第一个应该是最简单的,它是在相同的布局a RecyclerView中添加的,然后是包含"添加"项目的ViewGroup.作为父级,我将LinearLayout与LinearLayout一起使用LinearLayout,并引用了"添加"项目布局的Include标签.这实际上是在A CoordinatorLayout内部,因为我使用BottomSheet选择要添加的新"标准"项目.
我正在开发一个搜索联系人功能,在该屏幕中, recyclerview nestedscrolview ( fillviewport = true ). 屏幕设计:(此设计被客户接受,我无法更改) 将当前设备的所有触点加载到阵列列表中后,将从此数组过滤搜索结果. 有几种情况使该应用程序非常 laggy : 1.当用户键入具有 无结果的输入,然后用户清除搜索,我必须再次显示所有结果. nestedscrollview 必须为所有 recyclerview 的项目提供UI(例如:300个项目). 2.当结果数量有许多变化时(例如,从1到300个项目). nestedscrollview 必须为许多 recyclerview 渲染UI 我知道这种设计破坏了回收科的回收技术,但我无法更改它. 我尝试的是: recyclerView.setNestedScrollingEnabled(false); 在AndroidManifest中: android:wind
我正在使用Android项目中的Recyclerview,其性能确实很糟糕.从答案在这里,我尝试在代码中添加adapter.setHasStableIds(true);.运行时,我有一个错误: java.lang.IllegalStateException: Cannot change whether this adapter has stable IDs while the adapter has registered observers. 我的完整logcat如下; 09-22 22:22:23.634 1808-1808/com.revosleap.movielist E/AndroidRuntime: FATAL EXCEPTION: main Process: com.revosleap.movielist, PID: 1808 java.lang.IllegalStateException: Cannot change whether this adapter
文档说setItemViewCacheSize 在将其添加到屏幕上的视图数量之前将其添加到 潜在共享可回收的视图池. 和setMaxRecycledViews 设置最大持有人数量的持有人 丢弃. 但是,它们是否都可以作为缓存的作用,在该缓存中,视图是从中获取的(即,第一个集合RV缓存的视图数量,而第二组是RVP的视图)? 另外,当需要一个视图时,首先从RVP或RV的缓存中取出的位置? ,对于简单的未扣除回收库的两者的最佳(滚动,忽略内存)配置是什么? 解决方案 这是setItemViewCacheSize()的完整文档: 在将它们添加到潜在共享的回收池中. 屏幕外视图缓存保持意识到所附适配器的变化,允许a LayoutManager重复使用这些视图,而无需返回适配器重新启动它们. 换句话说,当您滚动回收即可滚动时,这样的视图几乎完全是屏幕外的,recyclerview将保持绕线状态,以便您可以将其滚动回视图而无需重新执行onBin
我正在尝试取得类似于Google Play音乐的"现在听"布局的东西.我在网络上发现的每个示例都是一个简单的RecyclerView.我正在尝试取得更复杂的事情.像 整个布局(减去工具栏)是否可以是单个RecyclerView,其中包含两个回收道?像 最终,我要实现的是像下面的布局,并保持表现. //vertical //vertical //horizontal //horizontal 解决方案 您不能在RecyClerview标签中使用RecyClerview. 而是在您的第一个适配器的bindviewholder呼叫中再次回收库列维适配器类似: - InnerRecyclerviewAdapter adapter=new InnerRecyclerviewAdapter(
我已经在创建列表和卡片指南.我的适配器仅用于膨胀布局的模式实现. 问题是滚动性能不佳.在仅包含8个项目的回收视图中. 在某些测试中,我验证了在Android l中没有发生这个问题.但是在Kitkat版本中,性能的降低是显而易见的. 解决方案 我最近遇到了同样的问题,所以这就是我对最新的RecyClerview支持库所做的: 用新的优化约束layout替换复杂的布局(嵌套视图,relativelayout).在Android Studio中激活它:转到SDK Manager-> SDK Tools Tab->支持存储库 - >检查Android&Solver的CondectAintLayout,以获取ConstraintLayOut.添加到依赖项: compile 'com.android.support.constraint:constraint-layout:1.0.2' 如果可能的话,使用相同的高度进行回收库的所有元素.并添加: recycl
我有以下RecyclerView.Adapter类的代码,而且效果很好: public class MyAdapter extends RecyclerView.Adapter { private List items; private int itemLayout; public MyAdapter(List items, int itemLayout){ this.items = items; this.itemLayout = itemLayout; } @Override public Viewholder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(paren
我最近遇到了使用Android 5.0发行的Android RecyclerView,看来RecyclerView只是包含在其中的视图持有人模式的传统ListView,它促进了视图的重复使用,而是而不是每次创建它. 使用RecyclerView的其他好处是什么? 如果两者在性能方面都具有相同的效果,为什么人们会更喜欢recyclerview`? 编辑 我发现人们提出了类似的问题,答案不是结论性的,在此处添加它们以保存记录. 在 我们应该使用recyclerview替换listView? 为什么有OnItemClickListener()吗?以及回收模型与ListView有何不同? 解决方案 使用RecycleView的另一个加上动画,可以用两行代码 来完成. RecyclerView.ItemAnimator itemAnimator = new DefaultItemAnimator(); recyclerView.setItem
我想创建活动的"完整页面"的PDF.该视图包含一个带有许多项目的回收模型. 我可以遵循我的recyclerview的完整尺寸,但仅在当前视图中绘制文件.这是我的代码: public void tela (){ // create a new document if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { PdfDocument document = new PdfDocument(); getScreenshotFromRecyclerView(mRecyclerView); content = mRecyclerView; content.setBackgroundColor(Color.parseColor("#303030")); PdfDocument.PageInfo pageInfo
我想将JSON对象的数据显示到RecyclerView中,因为我已经尝试过但没有获得任何数据. 可能,我知道我在哪里做mistake,我有什么missed? 我如何通过learning对象数据从MainAdapter到LearningActivity mainadapter 类: @Override public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View v = LayoutInflater.from(viewGroup.getContext()).inflate(rowLayout, viewGroup, false); return new ViewHolder(v); } @Override public void onBindViewHolder(ViewHolder viewHolder, in
我在表类中存储了三个图像:"事件"和表列,称为:parse.com上的" image" 我使用两个查询1来处理图像的显示,一个查看另一个表的信息(所有都是字符串) 问题是: 我用来获取所有图像的查询仅显示回收文章中的三个图像之一,而不是所有三个图像. 如何在recyclerview中显示来自parse.com的所有三个图像? 我的主要活动: public class MainActivity extends Activity { //Defining Variables protected Toolbar toolbar; protected NavigationView navigationView; private DrawerLayout drawerLayout; protected Button mButtonHeader; protected TextView mDayOfTheWeek; protected TextView mDate;
我试图将图像加载到Parse Web服务中的回收库中.为此我需要: a.根据标准检索的查询,按列表形式按类别图像.现在,我已经能够找到使用parseobjects做到这一点的方法,而不是像图像这样的寄生虫. b.一种方法,可以从parsefiles列表中提取图像并将它们加载到可以存储这些图像的对象列表中,即使它们没有本地ID.然后必须将它们加载到回收库中. 我很抱歉,我没有更多的信息.解析文档几乎没有相关信息,而且我无法找到有用的资源.例如,我不提供代码,因为我的代码是通用循环系统的代码.我可以从解析文档中发布代码,但这是浪费空间.如果这似乎是一个很大的请求,我深表歉意,但可能是,但我没有在网上找到任何帮助,我真的需要这个. 道歉, geffen avraham 解决方案 您可以在文档到ParseQuery类. 每个parsefile都有方法getUrl(),您可以将该URL推到某些图像加载库,例如毕加索,滑行或UIL.该库提供了下载,显示,缓