将tableView中的行ID传递到新场景中的Corona SQL。

我找到了一个类似的问题,到目前为止它对我有用,我用print语句获得了行ID。

我正在tableView中显示来自我的数据库的数据。使用onTouch函数,我希望在scrollView中显示新场景中显示特定于点击行的数据。因此,例如,我单击Capital_NL,它必须在scrollView(Scene 2)中显示Amsterdam。

到目前为止,这是我的代码:

第1场景:

local count = 0
local baslikRow = {}

for row in db:nrows("SELECT dua_id, baslik FROM dua") do
    count = count + 1
    baslikRow[count] = {}
    baslikRow[count].baslik = row.baslik
    baslikRow[count].dua_id = row.dua_id
end

local function tableViewListener( event )
    print(event.phase)
end

local function onRowRender( event )

    local row = event.row

    local rowHeight = row.contentHeight
    local rowWidth = row.contentWidth

    local options =
    {
        parent = row,
        text = baslikRow[row.index].baslik,
        x = 20,
        y = 0,
        font = native.systemFont,
        fontSize = 16
    }

    local rowTitle = display.newText(options)
    rowTitle:setFillColor( 0, 0, 0 )

    rowTitle.anchorX = 0
    rowTitle.x = 15
    rowTitle.y = rowHeight * 0.5
end

local function onRowTouch( event )
    local row = event.row

    if event.phase == 'tap' then
        print("Pressed rowNR: " .. row.index )
        print("Pressed rowID: " .. event.target.params.paramID)
        composer.gotoScene("scene2")
    end
end

local tableView = widget.newTableView{
    left = 0,
    top = 0,
    height = display.contentHeight,
    width = display.contentWidth,
    onRowRender = onRowRender,
    onRowTouch = onRowTouch,
}

for i = 1, count do
    tableView:insertRow
    {
        rowHeight = 50,
        rowid = baslikRow[count].dua_id,
        params = { paramID = baslikRow[i].dua_id }
    }
end

sceneGroup:insert(tableView)

第2场景:

---------------------
-- CREATE SCROLLVIEW
---------------------
local scrollView = widget.newScrollView
{
    left = 0,
    top = 0,
    width = display.contentWidth,
    height = display.contentHeight,
    topPadding = 0,
    bottomPadding = 0,
    horiontalScrollDisabled = true,
    verticalScrollDisable = false,
    listener = scrollListener,
}
sceneGroup:insert(scrollView)

---------------------
-- GET DATA FROM DB
---------------------
for row in db:nrows("SELECT metni FROM dua") do

    local rowParams =
    {
        duaID       = row.dua_id,
        Metni       = row.metni,
    }

    local options =
    {
        text = row.metni,
        x = display.contentCenterX + 20,
        y = display.contentHeight / 2,
        width = 300,
        width = display.contentWidth,
        font = native.systemFontBold,
        fontSize = 18,
    }

    local t = display.newText(options)
    t:setTextColor(0)
    scrollView:insert(t)
end

我现在拥有的是,无论我单击Capital_NL还是Capital_USA或Capital_Germany,我始终会得到Amsterdam的结果。

如何将第1场景中与数据库中相同的行中的数据传递到第2场景中?

点赞
用户3893454
用户3893454

我认为您要根据在前一个场景中点击的行号展示(metni)数据..

在scene1中尝试这个..

for row in db:nrows("SELECT dua_id, baslik, metni FROM dua") do
   count = count + 1
   baslikRow[count] = {}
   baslikRow[count].baslik = row.baslik
   baslikRow[count].dua_id = row.dua_id
   baslikRow[count].metni = row.metni

在onRowTouch事件处理程序中:

composer.gotoScene("scene2",{params = baslikRow[row.index].metni})

这样您可以传递要使用的数据..我猜您不需要在scene2中使用数据库代码..

要访问从scene1传递到scene2的数据

local selectedRow = event.params

然后..

local options =
    {
        text = selectedRow,
        x = display.contentCenterX + 20,
        y = display.contentHeight / 2,
        width = 300,
        width = display.contentWidth,
        font = native.systemFontBold,
        fontSize = 50,
    }

    local t = display.newText(options)
    t:setTextColor(0)
    scrollView:insert(t)

我认为这就是您所要求的..如果不是,请解释更多并给我们一个“dua”表的屏幕截图..

2015-10-02 20:25:47