0

我有一個片段內的列表視圖。此列表視圖具有以下longClick監聽器。記住在一個片段中的列表視圖中選定的行

private AdapterView.OnItemLongClickListener receivedListItemLongClickListener = new AdapterView.OnItemLongClickListener() { 

    @Override 
    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long arg3) { 
     Object object = reeceivedListView.getItemAtPosition(position); 
     showDialog(OPTIONS_DIALOG_FRAGMENT); 
     return true; 
    } 

}; 

它啓動它有一個選項可以刪除撤消父片段選擇的行一個新的列表AlertDialog。 我可以將選擇從AlertView傳回給父級,但我不記得選擇了哪一行。記住這些數據的正確方法是什麼?

+1

該行是位置ñ,你長時間點擊 –

+0

你在哪裏寫這部分代碼?它在你的適配器? –

回答

0

做出一個變量來存儲數據,您將n適配器如下圖所示:然後

int lastSelectedRowByLongClick = -1; 

在長按: 在適配器

private AdapterView.OnItemLongClickListener receivedListItemLongClickListener = new AdapterView.OnItemLongClickListener() { 

@Override 
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long arg3) { 
    lastSelectedRowByLongClick = position; 
    Object object = reeceivedListView.getItemAtPosition(position); 
    showDialog(OPTIONS_DIALOG_FRAGMENT); 
    return true; 
} 

}; 

,最好的做法是把刪除和任何功能也在你的適配器,如下所示:

public void deleteLastLongedPressed() 
{ 
if(lastSelectedRowByLongClick != -1) 
{ 
    //TODO: write the logic to delete the row 
    /// 
    //then set the variable to -1 again so nothing happens if no one was selected 
    lastSelectedRowByLongClick= -1; 
} 
} 
+0

感謝您的建議,但如果片段被銷燬或創建了片段的新實例,則這可能無法正常工作。另外我覺得保持一個實例變量來跟蹤所選的最後一行不是一個優雅的解決方案。如果我想這樣做。我不會問「什麼是記住這些數據的正確方法?」我想知道如果Android採用正確的方式執行特定的方式。 – user1324887

+0

android不提供任何方式來告訴你一些視圖點擊或任何東西的歷史。它的東西,你應該照顧,如果你需要它。如果你不想讓變量擦除,如果片段被破壞,使其變爲靜態。相信我,你可以做的最好 –

+0

我同意它可以工作。但我試圖找出正確的方式來做到這一點。如何將它作爲額外的變量進行傳遞。像'intent.putExtra(EXTRAS_KEY,extras);'這樣的東西? – user1324887