我感到困惑之间的差异postion和row id在ListActivity.onListItemClick().
该文档包含以下内容:
position The position of the view in the list
id The row id of the item that was clicked
Run Code Online (Sandbox Code Playgroud)
这两者之间有什么实际区别吗?我假设,由于存在两个不同的参数,即存在值不同的情况,但基于文档中使用的措辞,很难看出这种差异可能是什么.是否其中一个可以保存由某个Cursor或其他特殊功能提供的数据库行ID的值?
我有两个哈希h1和h2,我想在RSpec的比较.
我想检查一些转换后的元素h1是否相同h2,我们称之为f.也就是说,我想验证每个键k的位置h1,h1[k] == f(h2[k]).
例如,如果所有值h2都是相应值的两倍h1,那么我想检查kh1中的每个键,h2[k] == h1[k] * 2.
在RSpec中这样做的正确方法是什么?目前我这样做:
h1 = ...
expect(
h2.all? { |k,v|
v == f(h1[k])
}
).to be true
Run Code Online (Sandbox Code Playgroud)
但这似乎很笨拙.
当方向发生变化时,我在某些设备尺寸上切换活动和片段时遇到问题.在我的情况下它是large屏幕,但它可能会发生在其他屏幕尺寸,具体取决于应用程序.我四处寻找答案,但似乎没有什么能正确解决这个问题.
我有两个活动,MainActivity和SubordinateActivity.MainActivity是应用程序的唯一入口点; MainActivity启动SubordinateActivity.每个活动都有自己的片段,MainFragment和SubordinateFragment.在normal设备上运行时,无论方向如何,屏幕上一次只有一个片段有足够的空间.在这种情况下,每个活动都将管理自己的片段.在xlarge设备上,无论方向如何,都有足够的空间容纳两个碎片.在这种情况下,有不同的布局文件允许屏幕上有两个片段.MainFragment和SubordinateFragment都由MainActivity管理(从不使用SubordinateActivity).
large屏幕出现问题.使用横向方向,有足够的空间容纳两个碎片,但纵向方向则没有.我有适当的布局文件.在横向模式下,MainActivity管理两个片段(与xlarge设备一样),在纵向模式下,每个活动管理自己的片段(与normal设备一样).这会在两种情况下产生问题:
这个问题的一个很好的例子是GMail应用程序.以下是该应用程序的一些屏幕截图,以防不清楚我在说什么.我意识到GMail应用程序的UI实际上比我的更复杂,但问题是一样的.


我确信这是其他人遇到的问题,因为GMail开发人员也遇到过这个问题.我无法弄清楚一个好的解决方案是什么,因为每种可能性似乎都涉及违反Android UI最佳实践,或者在Activity代码和XML布局之间创建一些不合理的纠结.
以下是我的一些想法,其中没有一个看起来非常正确:
large设备上执行,这意味着混合代码,用于检查活动代码可用的布局.normal大小的设备上,它可以根据需要交换MainFragment和SubordinateFragment.最后我不认为这解决了问题,因为MainActivity仍然依赖于布局文件来告诉它显示哪些和多少片段.这也违反了Activity表示用户所做的离散事物的原则.以下是我一直在努力解决此问题的一些资源.正如我所说,这似乎是一个常见的问题,但似乎没有规范的Android解决方案.这是一个缺点,因为文档建议使用Fragments,而每个开发人员都会遇到这个问题.
简介:我有多窗格模式适用于xlarge设备.我试图解决的问题是在large只能处理横向多个窗格的设备上切换单窗格(纵向)和多窗格(横向)模式.
user-interface android screen-orientation android-layout android-fragments
我编写了一个API,需要初始化上下文,然后传递给每个API调用.调用者为上下文分配内存,然后使用其他参数将其传递给init函数,这些参数描述了他们希望以后的API调用的行为方式.上下文是不透明的,所以客户端不能真正在那里捣乱; 它仅用于API函数的内部使用.
我遇到的问题是调用者正在分配上下文,但没有初始化它.因此,后续API函数指的是无意义的垃圾,就好像它是真实的上下文一样.
我正在寻找一种方法来验证传递给API函数的上下文是否已经初始化.我不确定这是否可行.我想到的两个想法是:
不幸的是,我知道这些选项中的任何一个都可能导致误报验证,因为内存中的随机垃圾与"魔术"数字相匹配,或者因为上下文恰好占用了与先前初始化的上下文相同的空间.我认为后一种情况更有可能发生.
这简单归结为概率问题吗?在大多数情况下,我可以避免误报,但不是全部?是否值得使用一个只给我一个合理的准确概率的系统,或者这只会让调试其他问题变得更加困难?
我有一个数组,我想将其转换为哈希.我希望数组元素是键,所有值都相同.
这是我的代码:
h = Hash.new
myarr.each do |elem|
h[elem] = 1
end
Run Code Online (Sandbox Code Playgroud)
一种替代方案如下.我不认为它与上述解决方案有很大不同.
h = Hash[ *myarr.collect { |elem| [elem, 1] }.flatten ]
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法可以做到这一点?