简介:尝试通过自定义适配器包装器将标题行动态添加到ListView.ListView无法保持滚动位置同步.提供了可运行的演示项目.
我想根据CursorAdapter中的值动态地将项添加到列表中,在用户当前查看的位置之前的几个位置.为此,我有一个包装CursorAdapter的适配器,并将新内容保存在SparseArray中.当项目被添加到自定义适配器时,ListView需要更新,但我遇到了很多陷阱,试图让它工作,并希望得到一些建议.
演示项目可以在这里下载:DynamicSectionedList.zip
在演示中,通过向前看10个位置来动态添加标题,以找到列表项切换到下一个字母的正确位置.notifyDataSetChanged的每个实现都有如下所述的问题:
演示1
此演示显示了notifyDataSetChanged()的重要性.点击任何内容,应用程序将崩溃.这是由于一些理智ListView中检查...... mItemCount != adapter.getItemCount()
.道德是,我们需要通知列表数据已经改变.
演示2
自然的下一步是在发生更改时通知ListView更改.不幸的是,在ListView滚动时这样做会破坏所有触摸交互,直到应用程序切换到触摸模式.为了注意到这一点,你需要"推动滚动"到足以产生新的标题.点击屏幕不会导致滚动停止,一旦停止,列表项目都不会被点击.这是由于if (!mDataChanged) { /* do very important stuff */ }
AbsListView.onTouchEvent()中的一些代码.
演示3 为了解决这个问题,Demo 3引入了pendingChanges标志,自定义适配器获得了一个notifyDataSetChangedIfNeeded(),一旦它进入"安全"状态进行更改,ListView就可以调用它.必须通知更改的第一点是ListView.layoutChildren(),因此我重写该方法以在需要时首先通知更改,然后通过调用.过去至少一个标题然后单击列表项.
虽然我不完全确定原因,但这并不是很正常.使用键盘/轨迹球点击或选择项目会导致列表刷新而不会正确同步旧位置.它滚动到列表的顶部,这是不可接受的.
演示4 演示3中的滚动问题可以被征服,至少在触摸模式下.通过在触摸时添加对notifyDataSetChangedIfNeeded()的调用,数据更改发生在所有触摸交互按预期工作并且列表位置正确同步的时间.
但是,当设备没有处于触摸模式时,我找不到模拟器,更不用说它看起来确实像黑客一样.该列表几乎总是滚动回到顶部,我无法找出导致它偶尔保持正确位置的原因.
由于Android在每一步都在与我作斗争,我觉得应该有更好的方法.请尝试演示,如果可以应用任何修复,让它工作,这将是伟大的!
非常感谢能够对此进行研究的任何人,希望如果我们能够使代码正常工作,那么对于其他试图对带有标题的列表进行相同优化的人来说,这将是有用的.
android android-lazyadapter android-listview android-adapter
首先让我解释一下我的目标.我试图Animation
改变一个属性ArcShape
.一个ArcShape's
构造函数有两个领域:startAngle
和sweepAngle
.我想要制作动画sweepAngle
,使其在屏幕上显示为一个不断缩小的圆圈.
您可以通过想象PacMan来拍摄这个动画.想象一下,他的嘴闭上了.这个动画将类似于他越来越多地打开他的上颌,直到没有更多的PacMan.
现在......我有一些实施这个问题.首先,一旦ArcShape
创建了一个,就没有内置的方法来改变它sweepAngle
.这让我想到了第一个问题:有没有办法覆盖ArcShape
并实现某些setSweepAngle
方法?或者我是否必须new ArcShape
为每个sweepAngle
我希望展示的内容创建一个?
现在转到第二个问题......假设我找到了第一个问题的解决方案,我怎么能创建它Animation
呢?这是我现在所拥有的要点:
public class OpenPacman extends Animation {
public OpenPacman(float startAngle, float sweepAngle) {
mStartAngle = startAngle;
mSweepAngle = sweepAngle;
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
/* This represents the current sweepAngle */
float currAngle = mStartAngle + ((mSweepAngle - mStartAngle) * interpolatedTime);
//Now I need to update …
Run Code Online (Sandbox Code Playgroud) 我目前正在使用WPF开发一个C#应用程序.这很难解释,但我会试一试.
我想要做的是有一个进度条.进度条不会显示完成进度的百分比,而是应该继续在循环中从左到右移动条,就像在计算传输时需要多长时间时窗口所做的那样.大型文件在实际复制之前.
我该怎么做而不是显示正常的进度条.
感谢您对此的帮助.
ASP.Net 4框架上的MVC 2项目.我正试图在IIS7上设置它,它给了我403.14错误.
是的,我尝试了微软修复,它启用了目录浏览,完全是我想要它做的错误.
是的,我运行了aspnet_regiis -i
不,它仍然无法正常工作
我也尝试重新安装.net 4,仍然没有.
我有点怀疑它可能是网站本身的东西,因为其他.Net项目将在同一个IIS上运行.我唯一能想到的是它是我的.config文件,我将在下面粘贴:
<?xml version="1.0"?>
<!--
For more information on how to configure your ASP.NET application, please visit
http://go.microsoft.com/fwlink/?LinkId=152368
-->
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
<appSettings configSource="AppSettings.config"/>
<connectionStrings configSource="ConnectionStrings.config" />
<system.net>
<mailSettings>
<smtp configSource="Smtp.config" />
</mailSettings>
</system.net>
<system.web>
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
</compilation>
<authentication mode="Forms">
<forms loginUrl="~/Security/AccessDenied" timeout="2880" />
</authentication>
<roleManager enabled="true" …
Run Code Online (Sandbox Code Playgroud) 我希望使用JQuery显示更多/更少.我通过谷歌搜索了几个例子,但都没有工作.没什么好看的,我只需要将一段文字剪切到特定的高度,并且链接将扩展/隐藏其他文本.
我可以在没有Google Web Toolkit(GWT)支持的情况下使用WindowBuilder(Java可视化编辑器Eclipse插件)吗?
我有点困惑.它似乎与GWT集成以构建Google Web应用程序.
但我可以使用它为标准Java应用程序(如NetBeans)构建GUI 吗?
我知道这听起来很傻,但我花了很多时间知道是否可能,但我不知道.
请注意,我是Mac用户,(Mac上的WindowBuilder似乎不完全支持).
所以我有一个数组,显示允许哪些级别执行操作.
allowed = ["user", "admin"]
Run Code Online (Sandbox Code Playgroud)
还有另一个数组显示用户所属的组.
groups = ["user", "crazy"]
Run Code Online (Sandbox Code Playgroud)
对于用户所属的任何组,搜索允许的数组的最佳方法是什么?我知道这很容易,但我在这里画了一个真正的空白......
鉴于这个简单的Ruby代码:
def testMethod
testVar = 1
def subTestMethod
if testVar == 1
puts 'Yes'
else
puts 'No'
end
end
subTestMethod
end
testMethod
Run Code Online (Sandbox Code Playgroud)
有没有办法将局部testVar
变量传递给子方法而不必强制使用类变量?