天道酬勤,学无止境

如何在虚拟模式下将项目添加/删除到ListView?(How do I add/remove items to a ListView in virtual mode?)

问题

如果我在虚拟模式下使用ListView,那么据我所知,列表视图仅跟踪列表中的少量项目。 当用户滚动时,它会动态检索需要从虚拟列表中显示的项目。

但是,如果在主列表中添加或删除了项目,该怎么办? 如果在列表视图显示的索引范围之外添加/删除项目,则我认为当用户滚动到该索引时,列表视图将显示添加/缺失的项目。 这样对吗? 但是,如果从用户当前正在查看的索引范围中添加/删除项目,该怎么办? 如何触发列表视图以刷新其当前正在查看的项目以显示新项目/缺失项目?

仅供参考:如果有任何区别,我正在使用ObjectListView。

回答1

虚拟列表对您的项目列表一无所知。 它不会跟踪它们,甚至也不是一小部分。 它只会问“您想在第n行显示什么?”。

如果主列表发生更改,那么您只需要做的就是重新绘制列表。 Invalidate()将为您做到这一点。 然后,列表视图将再次询问您在控件中可见的每一行应显示什么。

如果您使用的是ObjectListView,是否考虑过使用FastObjectListView,它可以为您提供虚拟列表的快速好处,并且易于使用普通的ObjectListView?

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 单击项目列表视图中的按钮时如何在android中的列表视图中添加/删除项目(How to add/remove item from listview in android when click button in item listview)
    问题 我是新手android.mini应用程序有一些问题。 您可以看到下图:http://i481.photobucket.com/albums/rr175/viethungit/android.png 首先,当在行1中添加单击按钮时,行1(布局1)出现在列表视图中,然后在行2(布局2)中出现单击按钮,然后继续...单击行1中的按钮添加,在列表视图中出现布局2...。我尝试搜索来自Google先生,但我找不到...任何人都可以帮助我! 这是布局,我不知道如何执行活动 add_item.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#EEEEEE" android:orientation="horizontal" android:padding="5dip"> <!-- Image Item--> <ImageButton
  • WPF ListView与项目的水平排列?(WPF ListView with horizontal arrangement of items?)
    问题 我想以类似于列表模式下WinForms ListView的方式在ListView中布置项目。 也就是说,在ListView中不仅在垂直方向而且在水平方向上布置项目的位置。 我不介意这些项目的布局是这样的: 1 4 7 2 5 8 3 6 9 或像这样: 1 2 3 4 5 6 7 8 9 只要垂直和水平显示它们,以最大程度地利用可用空间。 我能找到的最接近的是这个问题: 如何使WPF ListView项目像水平滚动条一样水平重复? 仅将项目水平放置。 回答1 听起来您正在寻找的是WrapPannel,它将水平放置项目直到没有更多空间,然后移至下一行,如下所示: (MSDN) 替代文字http://i.msdn.microsoft.com/Cc295081.b1c415fb-9a32-4a18-aa0b-308fca994ac9(zh-cn,Expression.10).png 您还可以使用UniformGrid,它可以将项目按一定数量的行或列进行布局。 我们使用ListView,ListBox或任何形式的ItemsControl中的其他面板来使项目排列的方式是通过更改ItemsPanel属性。 通过设置ItemsPanel,可以从ItemsControls使用的默认StackPanel进行更改。 使用WrapPanel,我们还应该设置宽度,如下所示。 <ListView>
  • 如何将控制台之类的元素添加到ac#winforms程序(How do I add a console like element to a c# winforms program)
    问题 我有一个监视调试消息的程序,我曾尝试使用TextBox并将消息附加到它上,但是它伸缩性不好,并且当消息数量变大时会减慢速度。 然后,我尝试了一个ListBox,但是在追加新消息时滚动滚动到顶部。 它也不允许像文本框那样进行剪切和粘贴。 有什么更好的方法来实现嵌入在winforms窗口中的控制台之类的元素。 编辑:我仍然希望能够像Visual Studio一样嵌入输出窗口,但由于我不知道这是一种简单的方法,因此这是我使用的两个解决方案。 除了使用可以正常工作的RichTextBox之外,您还必须不时清除它。 我使用了自己喜欢的控制台。 这是我编写的一个包装小类来处理此问题。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; namespace Con { class Ext_Console { static bool console_on = false; public static void Show(bool on,string title) { console_on = on; if (console_on) { AllocConsole(); Console.Title =
  • 如何清除ListView选择?(How do I clear ListView selection?)
    问题 TL; DR:您从(a)我的列表视图中选择一个选项。 然后,您改变主意并在(b)我的编辑文本中输入内容。 如何清除列表视图选择,仅显示编辑文本? (反之亦然) 我有一个带有选项列表视图的应用程序以及一个用于创建自己的选项的edittext。 我需要用户选择或创建一个选项,但不能同时选择两者。 这是我的布局图: 每当用户从列表视图中选择一个选项时,我都会通过将其设置为绿色来将其设置为“选定”,如下所示: <?xml version="1.0" encoding="utf-8" ?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:drawable="@color/colorPrimary"/> <item android:state_selected="false" android:drawable="@color/windowBackground" /> </selector> (这被设置为我的列表视图的背景) 问题:如果用户决定键入自己的选项,因为他们只能有一个选项,我想取消选择listview选项。
  • Android:如何隐藏ListView项(Android: How to hide a ListView Item)
    问题 如何隐藏ListView中的项目或至少将其高度设置为零? 我尝试将“视图”的可见性设置为“消失”,但它仍保持该项目的空间(高度)。 回答1 重新讨论一个老问题,但是我遇到了一个问题,我想根据列表数据之外的条件暂时隐藏列表项。 我最终要做的是在xml中创建“空项目”布局,并根据我的条件而不是getView()中的convert视图返回了该布局。 而不是返回convertView,我返回了我的null_item ... return inflater.inflate(R.layout.null_item, null); null_item.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" > </LinearLayout> 回答2 如果要隐藏这样的项目: convertView.setLayoutParams(new AbsListView
  • RecyclerView与ListView(RecyclerView vs. ListView)
    问题 来自android开发人员(创建列表和卡片): RecyclerView小部件是ListView的更高级,更灵活的版本。 好的,听起来很酷,但是当我看到此示例图片时,我对两者之间的区别感到非常困惑。 上面的图片可以使用自定义适配器通过ListView轻松创建。 那么,在什么情况下应该使用RecyclerView呢? 回答1 RecyclerView是作为ListView改进而创建的,因此,可以的,您可以使用ListView控件创建附加列表,但是使用RecyclerView更容易,因为它: 在上/下滚动时重用单元格-这可以通过在ListView适配器中实现View Holder来实现,但这是可选的,而在RecycleView则是编写适配器的默认方式。 将列表与其容器解耦-因此,您可以在运行时通过设置LayoutManager轻松地将列表项放在不同的容器(linearLayout,gridLayout)中。 例子: mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); //or mRecyclerView.setLayoutManager(new
  • 如何在android master / detail活动中修改虚拟内容?(How to modify dummy content in android master/detail activity?)
    问题 我将在主/详细模式中修改由eclipse生成的项目。 我找不到执行此操作的方法。 特别是,我将从xml(res / values / arrays)资源文件中获取项目。 这是java文件: package com.ga.termeapp.dummy; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class DummyContent { public static class DummyItem { public String id; public String content; public DummyItem(String id, String content) { this.id = id; this.content = content; } @Override public String toString() { return content; } } public static List<DummyItem> ITEMS = new ArrayList<DummyItem>(); public static Map<String, DummyItem> ITEM_MAP = new HashMap
  • dyld`__abort_with_payload:没有错误消息(dyld`__abort_with_payload: With no error message)
    问题 当我使用XCode启动我的应用程序时,出现了崩溃但没有错误 应用程序仅在此线程上停止 我应该怎么做才能获得有关该问题的更多信息? 回答1 如果使用自定义框架,则需要将其放在Xcode项目“目标/常规”标签下的“嵌入式二进制文件”部分中。 回答2 对我来说,简单的“ Clean并Rebuild该问题。 希望能帮助到你。 回答3 在系统更新到macOS 10.15.2 beta之前,出现了此问题。 禁用“ Thread Sanitizer”可以解决此问题(Xcode 11.2)。 现在,我无法使用Thread Sanitizer,而不得不等待下一次操作系统更新。 回答4 将框架添加到嵌入式二进制资产列表中可以解决此问题。 这是在Xcode GUI中作为嵌入式框架(Xcode 9.2,个人而言,我更喜欢可视化面包屑痕迹;-))的最终形式在Xcode GUI中的最终形式看起来像: Apple是否故意使运行时崩溃,以某种方式告诉开发人员您不能在iOS开发中将非Apple框架用作简单链接的框架的问题? 最好将其显示为我认为的构建错误……并带有一个“移动它”按钮。 嵌入式二进制文件的使用使最终用户不必添加独立于您的应用程序的框架(或由安装程序完成)。 对于iPhone(iOS),这是不可能的,但是在macOS上,这是可能的,但是很快就会变得混乱。 对于最终用户而¨
  • 在不冻结UI的情况下将150,000条记录添加到列表视图(Adding 150,000 records to a listview without freezing UI)
    问题 我有一个listview循环,正在向我的listview添加150,000个项目。 出于测试目的,我将此代码移到了具有委托的后台工作人员,但仍冻结了UI。 我正在尝试找到一种解决方案,以便在我在应用程序中执行其他操作时可以在后台添加这些项目。 你们推荐什么解决方案? 这就是我正在使用的 Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ListView1.Clear() ListView1.BeginUpdate() bw.WorkerReportsProgress = True bw.RunWorkerAsync() End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click If bw.IsBusy Then bw.CancelAsync() End Sub Private Sub bw_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bw.DoWork For x = 1
  • 将ListView choiceMode从singleChoice更改为multipleChoiceModal(Change ListView choiceMode from singleChoice to multipleChoiceModal)
    问题 我有一个ListView,通常是singleChoice choiceMode 。 当用户长按一个项目时,我想进入一种动作模式,该模式允许选择多个项目,以便他们可以对任何选定的项目执行操作。 我能够配置ListView ,使其处于singleChoice模式,并且用户能够选择列表项以在其旁边显示详细信息片段,并使列表项本身处于激活状态。 我还能够配置ListView ,使其处于multipleChoiceModal choiceMode并在项目上长按可启动操作模式并允许多个选择,但现在ListView在正常模式下将不允许单个选择(无操作)模式)。 我如何才能拥有处于singleChoice模式的ListView,然后在长按某个项目时将其转换为multipleChoiceModal模式? 这是我能想到的最接近的: 将ListView设置为singleChoice模式设置ListView的OnItemLongClickListener并在该侦听器中: 将ListView的OnItemLongClickListener设置为null 将ListView的choiceMode设置为multipleChoiceModal 在长按的项目上调用view.performClick() 。 这种方法有两个问题。 直到我第二次长按一个项目时,动作模式才开始。 当我调用getListView()
  • 启动活动时自动弹出键盘(Automatic popping up keyboard on start Activity)
    问题 我有一个相对简单的问题。 我有一个包含很多EditText的活动。 当我打开活动时,它会自动聚焦到第一个EditText并显示虚拟键盘。 我该如何预防呢? 回答1 在XML文件的布局标记中使用以下属性: android:focusable="true" android:focusableInTouchMode="true" 正如其他成员在评论中所报告的那样,它不适用于ScrollView因此您需要将这些属性添加到ScrollView的主要子级。 回答2 您可以将其添加到Android Manifest活动中: android:windowSoftInputMode="stateHidden|adjustResize" 回答3 我在这里描述了几种实现,但是现在我将Activity属性添加到AndroidManifest.xml中: android:windowSoftInputMode="stateAlwaysHidden" 我认为即使您正在使用fragments这也是简便的方法。 “ stateAlwaysHidden ”当活动的主窗口具有输入焦点时,软键盘始终处于隐藏状态。 回答4 如果您对活动有另一个视图(如ListView ,则还可以执行以下操作: ListView.requestFocus(); 在您的onResume()中以从editText获取焦点。
  • 将此类扩展为在列表视图中撤消/重做(Extend this Class to Undo/Redo in a Listview)
    问题 我正在使用第三方代码来管理WindowsForm项目中的撤消/重做操作。 我需要扩展该类以管理Listview中的撤消/重做操作,这意味着: ·撤消/重做添加/删除项目和子项目 ·撤消/重做检查/取消选中行 ·撤消/重做一些我可能已经错过的其他重要事项 我不知道如何开始执行此操作,代码对我来说太复杂了,对此我的帮助/提示/示例都非常满意,但是在3个月内我无法进行此更改,我我想我需要很好的解释或完整的例子,这是代码: ******************************************************** Undo/Redo framework (c) Copyright 2009 Etienne Nijboer ******************************************************** http://pastebin.com/Gmh5HS4x (我没有在此处发布代码,因为它超过了StackOverflow的30.000个字符的限制) 更新: 这是作者提供的一些有用信息,解释了添加Listview支持所需要做的事情,但实际上我自己一个人做不到: 顺便说一句,为列表视图添加功能并不难,也是了解其工作方式的绝妙方法。 您将需要创建一个新的监视器,该监视器将捕获listview更改事件并存储当前值,然后再进行更改。
  • 收藏与清单您应该在界面上使用什么?(Collection<T> versus List<T> what should you use on your interfaces?)
    问题 代码如下所示: namespace Test { public interface IMyClass { List<IMyClass> GetList(); } public class MyClass : IMyClass { public List<IMyClass> GetList() { return new List<IMyClass>(); } } } 当我运行代码分析时,我得到以下建议。 警告3 CA1002:Microsoft.Design:将“ IMyClass.GetList()”中的“列表”更改为使用Collection,ReadOnlyCollection或KeyedCollection 我应该如何解决这个问题?这是什么好的做法? 回答1 为了回答为什么List <T>不是问题的“为什么”部分,原因是面向未来和API简单。 面向未来 List <T>的设计不能通过将其子类化而容易地扩展。 它旨在快速实现内部实施。 您会注意到它上的方法不是虚拟的,因此不能被覆盖,并且它的Add / Insert / Remove操作没有任何钩子。 这意味着,如果您将来需要更改集合的行为(例如,拒绝人们尝试添加的空对象,或者在这种情况发生时执行其他工作(例如更新类状态)),则需要更改类型在集合中,您可以返回一个可以子类化的类,这将是一个重大的接口更改(当然
  • lzg_ad:XPE常见问题FAQ
    .为什么我做的XPE找不到网上邻居的属性,所以导致无法设置IP地址? 原因一:缺少Wireless Zero Configuration组件原因二:没有正确的安装网卡驱动程序 2.如何让XPE实现自动登录的功能? 方法一:在Windows Logon组件的Setting中设置缺省用户名;方法二:加入Automatic Logon组件,同时在Automatic Logon的Setting中必须设置自动登录的用户名和密码;方法三:使用Minlogon登录模式;方法四:修改注册表,在HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Winlogon下,自己加两个主键,一个是DefaultPassword,键值设为管理员的密码,一个是AutoAdminLogon,键值设为1就行了。 3. 如何在开发环境中向XPE的运行库中添加页面文件(虚拟内存)? 在目标设计器中,在您的配置中定位硬件抽象层 (HAL) 组件,例如 Standard PC。展开该组件的树并选择 Settings。编辑“System Pagefile”设置中的“Initial Size”和“Maximum Size”。而且,选中 Enable Pagefile support 复选框。 4. 在 Windows XP Embedded 中
  • ListBoxItem中的复杂UI(Complex UI inside ListBoxItem)
    问题 在WPF中,我可以通过为ListBox提供ItemTemplate来将任何UI添加到ListBoxItem : <ListBox ItemsSource="{Binding}"> <ListBox.ItemTemplate> <DataTemplate> <Border BorderThickness="1" BorderBrush="Gray" CornerRadius="8" Padding="4,0,4,0"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="50"/> <ColumnDefinition/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition/> <RowDefinition/> <RowDefinition/> </Grid.RowDefinitions> <CheckBox Grid.Column="1" Content="Is Active Customer" IsChecked="{Binding IsActive}"/> <Label Content="Id:" Grid.Row="1" HorizontalAlignment="Right"/> <Label Content="Name:" Grid
  • 获取ListView可见项(Get ListView Visible items)
    问题 我有一个ListView ,其中可能包含很多项目,因此它已virtualized并回收了项目。 它不使用排序。 我需要刷新一些值显示,但是当项目太多时,更新所有内容太慢了,因此我只想刷新可见的项目。 如何获得所有当前显示项目的列表? 我试图查看ListView或ScrollViewer ,但是我仍然不知道如何实现这一点。 解决方案不能遍历所有项目以测试它们是否可见,因为这太慢了。 我不确定代码或xaml是否有用,它只是将ItemSource绑定到Array的Virtualized / Recycling ListView 。 编辑:答案: 感谢akjoshi,我找到了方法: 获取ListView的ScrollViewer (使用FindDescendant方法,您可以使用VisualTreeHelper自己做)。 读取其ScrollViewer.VerticalOffset :它是显示的第一项的编号读取其ScrollViewer.ViewportHeight :它是显示的项目数。 Rq: CanContentScroll必须为true。 回答1 看看MSDN上的这个问题,它展示了一种找出可见的ListView项的技术- 如何在ListView中找到实际可见的行(ListViewItem(s))? 这是该帖子中的相关代码- listView.ItemsSource = from
  • 如何在Javascript数组的开头添加新的数组元素?(How can I add new array elements at the beginning of an array in Javascript?)
    问题 我需要在数组的开头添加或添加元素。 例如,如果我的数组如下所示: [23, 45, 12, 67] 我的AJAX调用的响应为34 ,我希望更新后的数组如下所示: [34, 23, 45, 12, 67] 目前,我正在计划这样做: var newArray = []; newArray.push(response); for (var i = 0; i < theArray.length; i++) { newArray.push(theArray[i]); } theArray = newArray; delete newArray; 有没有更好的方法可以做到这一点? Javascript是否具有任何内置功能可以做到这一点? 我的方法的复杂度是O(n) ,看到更好的实现将真的很有趣。 回答1 使用unshift。 就像推送,除了将元素添加到数组的开头而不是结尾之外。 unshift / push -一个元素添加到一个数组的开始/结束 shift / pop删除并返回数组的第一个/最后一个元素 一个简单的图... unshift -> array <- push shift <- array -> pop 和图表: add remove start end push X X pop X X unshift X X shift X X 请查看MDN阵列文档。 实际上
  • 如何在XAMPP上设置Apache虚拟主机(Windows)(How To Set Up Apache Virtual Hosts on XAMPP (Windows) [closed])
    问题 关门了。 这个问题需要更加集中。 它当前不接受答案。 想改善这个问题吗? 更新问题,使其仅通过编辑此帖子即可将重点放在一个问题上。 1年前关闭。 改善这个问题 如何在XAMPP上设置Apache虚拟主机(Windows) 回答1 在XAMPP / WAMP上制作VHOST(虚拟主机)的完整指南 注意:首先,对于XAMPP和WAMP或Windows的其他Apache软件包,此指南的唯一区别是对这些软件包在计算机上的安装位置的疑问。 简介:如果您打算在php中开发许多独立项目并使它们彼此隔离,则vhost(虚拟主机)是一个很好的解决方案,例如: 项目1基于php,并且具有本地url地址php.localhost 项目2是带有URL laravel.localhost的Laravel项目项目3是带有URL codeigniter.locathost Project 4是一个带有url wordpress.locathost 您应该已经安装了最新版本的XAMPP / WAMP。 顺便说一句,就我而言,我只安装了Apache和MySQL。 *注意:默认情况下,大多数Web服务器将使用端口80作为默认端口,在某些情况下,如果您安装了另一个Web服务器(例如(Microsoft IIS)),它也将使用端口80,或者在其他情况下SKYPE有时也会使用端口就像某些用户在Windows 8
  • 2020年【腾讯+百度+字节+阿里】Android一线开发岗面试真题最新汇总(持续更新中...)
    腾讯面试真题 网络编程 我项目中Socket是怎么实现IM通讯的;Socket通讯,怎么实现图片,大文件传输;http报文结构;https中哪里用了对称加密,哪里用了非对称加密,对加密算法(如RSA)等是否有了解?http,https有什么不同,如何进行加密,各种加密算法的性能;你知道的几种网络请求方式,get和post有什么区别,性能比较;三次握手,四次挥手;浏览器请求一个网址的过程; IO 10G Text文本,怎么读取到页面上;封装一个网络框架,考虑哪些问题,使用多线程,下载一个大文件,如何得知文件下载完成 设计模式 单例模式几种,双层检测单例为啥要进行第二次判断,它一定安全么?内部类为什么只会被加载一次。。。。。。。一个问题的延伸至代理模式,装饰者模式 数据结构+算法 Java中你了解几种数据结构;那你用过hashtable么,他是怎么实现唯一性的;那你说下LinkeMap吧;怎么监测链表有没有产生死循环;你熟悉哪些算法,他们得时间复杂度是怎么样的;arrayMap的实现原理1~100的int数组,循环打印输出index的为8的倍数的value并删除,要求,效率要高设计一个算法,实现输出展示Android系统的所有文件路径; 序列化 Android中Serializable和Parcelable原理,效率等;intent传递大小限制;怎么传输一直10M的图片; 并发编程
  • 用REORDER_TO_FRONT令人费解的行为(Puzzling behavior with REORDER_TO_FRONT)
    问题 活动A在没有标志的情况下开始活动B。 堆栈现在是AB,顶部是B。 B以FLAG_ACTIVITY_REORDER_TO_FRONT(唯一标志)开始活动A。 我希望堆栈现在是BA。 但是,此时按返回按钮时,它将返回到主屏幕。 我希望在这里将活动B放在首位。 再次单击启动器图标后,该应用程序将以B作为运行活动打开,并且堆栈中没有任何内容。 清单中的标准启动模式(默认)。 这是预期的行为,我只是不正确地理解? 编辑:我创建了一个没有混杂因素的测试项目,仍然看到相同的行为。 我只是不了解它,似乎不是根据文档。 编辑:对我来说,这种行为似乎是框架中的一个错误,请参阅下面对我的回答的评论。 我需要一种解决方法。 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the