小编Pau*_*den的帖子

onListItemClick()中位置和行id之间的实际差异

我感到困惑之间的差异postionrow idListActivity.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的值?

user-interface android android-listview

27
推荐指数
2
解决办法
7192
查看次数

poll()在超时为0时做什么?

我正在查看poll() 手册页,它告诉我poll()何时传递正值和负值为timeout参数的行为.它不会告诉我如果超时会发生什么0.有任何想法吗?

查看epoll_wait() 手册页,它告诉我,如果超时值为0,即使没有可用事件,它也会立即返回.假设行为方式相同是否安全poll()

c sockets

10
推荐指数
1
解决办法
1万
查看次数

如何比较RSpec中的两个哈希值?

我有两个哈希h1h2,我想在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)

但这似乎很笨拙.

ruby rspec

9
推荐指数
1
解决办法
9370
查看次数

在方向变化上切换碎片或活动(即布局)

当方向发生变化时,我在某些设备尺寸上切换活动和片段时遇到问题.在我的情况下它是large屏幕,但它可能会发生在其他屏幕尺寸,具体取决于应用程序.我四处寻找答案,但似乎没有什么能正确解决这个问题.

我有两个活动,MainActivity和SubordinateActivity.MainActivity是应用程序的唯一入口点; MainActivity启动SubordinateActivity.每个活动都有自己的片段,MainFragment和SubordinateFragment.在normal设备上运行时,无论方向如何,屏幕上一次只有一个片段有足够的空间.在这种情况下,每个活动都将管理自己的片段.在xlarge设备上,无论方向如何,都有足够的空间容纳两个碎片.在这种情况下,有不同的布局文件允许屏幕上有两个片段.MainFragment和SubordinateFragment都由MainActivity管理(从不使用SubordinateActivity).

large屏幕出现问题.使用横向方向,有足够的空间容纳两个碎片,但纵向方向则没有.我有适当的布局文件.在横向模式下,MainActivity管理两个片段(与xlarge设备一样),在纵向模式下,每个活动管理自己的片段(与normal设备一样).这会在两种情况下产生问题:

  1. SubordinateActivity以纵向模式加载,方向更改为横向模式.我想要的:SubordinateActivity应该被丢弃,MainActivity应该加载,SubordinateActivity先前显示的内容显示在它自己的SubordinateFragment中.问题:SubordinateActivity在横向模式下自行加载.
  2. MainActivity在横向模式下加载MainFragment和SubordinateFragment,并且方向切换为纵向.我想要的:以前在SubordinateFragment中显示的内容现在应该由SubordinateActivity单独显示.问题:MainActivity仅显示MainFragment中的内容.

这个问题的一个很好的例子是GMail应用程序.以下是该应用程序的一些屏幕截图,以防不清楚我在说什么.我意识到GMail应用程序的UI实际上比我的更复杂,但问题是一样的.

GMail消息列表 GMail消息显示

GMail在大型设备上横向定位

我确信这是其他人遇到的问题,因为GMail开发人员也遇到过这个问题.我无法弄清楚一个好的解决方案是什么,因为每种可能性似乎都涉及违反Android UI最佳实践,或者在Activity代码和XML布局之间创建一些不合理的纠结.

以下是我的一些想法,其中没有一个看起来非常正确:

  • 检测两个活动中的方向更改,并启动其他活动(例如,通过使用FLAG_ACTIVITY_CLEAR_TOP)返回堆栈并使用新意图加载先前加载的活动.这是一个问题,因为方向更改代码只应在large设备上执行,这意味着混合代码,用于检查活动代码可用的布局.
  • 完全放弃SubordinateActivity.它似乎有点多余,MainActivity可以自己管理片段,即使在normal大小的设备上,它可以根据需要交换MainFragment和SubordinateFragment.最后我不认为这解决了问题,因为MainActivity仍然依赖于布局文件来告诉它显示哪些和多少片段.这也违反了Activity表示用户所做的离散事物的原则.

以下是我一直在努力解决此问题的一些资源.正如我所说,这似乎是一个常见的问题,但似乎没有规范的Android解决方案.这是一个缺点,因为文档建议使用Fragments,而每个开发人员都会遇到这个问题.

简介:我有多窗格模式适用于xlarge设备.我试图解决的问题是在large只能处理横向多个窗格的设备上切换单窗格(纵向)和多窗格(横向)模式.

user-interface android screen-orientation android-layout android-fragments

7
推荐指数
1
解决办法
1914
查看次数

验证内存是否已在C中初始化

我编写了一个API,需要初始化上下文,然后传递给每个API调用.调用者为上下文分配内存,然后使用其他参数将其传递给init函数,这些参数描述了他们希望以后的API调用的行为方式.上下文是不透明的,所以客户端不能真正在那里捣乱; 它仅用于API函数的内部使用.

我遇到的问题是调用者正在分配上下文,但没有初始化它.因此,后续API函数指的是无意义的垃圾,就好像它是真实的上下文一样.

我正在寻找一种方法来验证传递给API函数的上下文是否已经初始化.我不确定这是否可行.我想到的两个想法是:

  1. 使用预定义的常量并将其存储在上下文的"魔术"字段中,以便在API调用时进行验证.
  2. 使用上下文内容的校验和,将其存储在"magic"字段中并在调用时验证它.

不幸的是,我知道这些选项中的任何一个都可能导致误报验证,因为内存中的随机垃圾与"魔术"数字相匹配,或者因为上下文恰好占用了与先前初始化的上下文相同的空间.我认为后一种情况更有可能发生.

这简单归结为概率问题吗?在大多数情况下,我可以避免误报,但不是全部?是否值得使用一个只给我一个合理的准确概率的系统,或者这只会让调试其他问题变得更加困难?

c memory-management

5
推荐指数
2
解决办法
451
查看次数

更好的数组哈希转换方式

我有一个数组,我想将其转换为哈希.我希望数组元素是键,所有值都相同.

这是我的代码:

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)

有没有更好的方法可以做到这一点?

ruby arrays hash ruby-1.9

1
推荐指数
1
解决办法
120
查看次数