【问题标题】:How do I permanently select / highlight a TableView row in Titanium Android?如何在 Titanium Android 中永久选择/突出显示 TableView 行?
【发布时间】:2013-01-07 10:56:52
【问题描述】:

我有一个具有 Master / Detail 布局的平板电脑应用程序,在 Master 面板中有一个 TableView 可以更改 Detail 窗格的内容。我希望主行在单击时保持突出显示,就像在 android 操作系统设置中一样。

现在我能做的最好的事情就是将backgroundColor 设置为新颜色以响应'click' 事件。但是,当我快速点击时,该行会突出显示,然后闪烁恢复正常,然后再次突出显示。我猜这是我松开手指和更改背景颜色之间的延迟。

tableview.addEventListener('click', function(e) {
    ...
    else if (e.rowData.id == 3) { // scan history
        e.row.backgroundColor = 'blue';

这似乎是其他人的做法:http://developer.appcelerator.com/question/124359/android---tableviews-deselectrow

如果我只使用 android 而不是 Titanium:How can I highlight the table row on click ?

【问题讨论】:

    标签: android titanium tableview


    【解决方案1】:

    试试这个。 touch start 会立即被调用,而 click 通常不会。请注意,according to the docs scroll 事件和 touch 事件不能在 iOS 和 Android 上同时发生,因此如果您有 `touchstart` 侦听器,您可能还想处理 touchcancel 事件。

    tableview.addEventListener('touchstart', function(e) {
        ...
        // Get the source row, and then get its id
        else if (e.source.id == 3) { // scan history
            e.row.backgroundColor = 'blue'; 
    });
    

    编辑: 也许更好的方法是处理touchend 事件。这将处理快速点击、用户滑动到不同行以及滚动边缘情况。

    【讨论】:

    • 虽然我认为这会产生更快的背景颜色变化,但它有额外的复杂性。 touchstart 事件不会传输任何行数据,因此我必须使用触摸的 x 和 y 坐标来计算行。我还必须处理用户在一行上触地但在释放之前滑到另一行的情况。谢谢你的建议!
    • 其实可以通过e事件的source属性获取行数据。也许您想要的是 touchend 事件来处理滑动,但是请注意,表上的 scroll 事件不能与行上的 touch 事件同时发生。
    • 返回的源对象是表视图,而不是行。我尝试为每个单独的行添加一个 touchend 侦听器,但从未调用过。有趣的是,每一行上的“点击”侦听器确实有效。我总是可以使用 x, y 从 tableview touchend 事件中找出行。再次感谢您的跟进。
    【解决方案2】:

    创建行时,请使用:

    selectionStyle : "NONE"
    

    这可以防止它在点击/触摸时改变颜色

    并滚动您自己的事件侦听器来准确控制您的行何时突出显示。

    iOS 的蓝色行选择颜色类似于:“#006EF1”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-30
      • 1970-01-01
      • 1970-01-01
      • 2015-02-16
      • 1970-01-01
      • 1970-01-01
      • 2013-08-08
      • 1970-01-01
      相关资源
      最近更新 更多