2011-10-27 117 views
2

我正在使用listview,需要模擬一個列表項的長按,但沒有performItemLongClick方法存在。 既然View既有performClick和performLongClick的定義,又因爲ListView已經有了performItemClick,它看起來應該也有performItemLongClick。 他們是否忘記實施或揭露它?如何解決缺少方法ListView.performItemLongClick?

無論如何,我的問題是,如何最好地解決這個問題? 我試着(ab)使用performItemClick並使用id參數來判斷它是一個點擊還是一個longclick,但點擊事件顯然是在向上動作中觸發的,所以現在我得到一個longclick,然後是一個常規點擊。

我知道我可以在長按下設置一個標誌並忽略下面的點擊,但那不是我正在尋找的解決方案。我認爲這裏有人有更好的方法。

感謝

+1

我面臨同樣的問題,我還沒有找到任何解決方法來對ArrayAdapter中包含的項目執行「長按」操作。 所以,我宣佈了一個關於android isue跟蹤器的問題:http://code.google.com/p/android/issues/detail?id=22275 – Mathieu

回答

0

截至2014年1月24日,在原始問題兩年半之後,API(第19級/ Android 4.4)仍然不支持此功能。

由於沒有人提供任何替代方案,這將不得不回答這個問題。

+0

難道你只是調用如果它被長時間按下就會被執行的方法嗎? –

+1

並非針對所有用例,否則這種類型的方法將不存在任何理由。 – Marmoy

-2

使用

lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 

@Override 

public boolean onItemLongClick(AdapterView<?> av, View v, int pos, long id) { 

    return onLongListItemClick(v,pos,id); 

} 

});

+0

謝謝,但我知道如何聽一個longClick事件,我需要知道的是如何從代碼中觸發它。你有什麼想法嗎? – Marmoy

+0

你是什麼意思從代碼觸發它? –

+0

您可以使用listview.performItemClick從代碼觸發點擊,我只是想觸發一次長按。如果您不確定「從代碼」的含義,它只是觸發程序內的點擊事件,而不是用手指在顯示屏上物理觸發點擊事件。 – Marmoy

-2

或嘗試contextmenu,首先註冊列表視圖 registerForContextMenu(getListView());

@Override 
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) { 
    AdapterView.AdapterContextMenuInfo info; 
    try { 
     info = (AdapterView.AdapterContextMenuInfo) menuInfo; 
    } catch (ClassCastException e) { 
     Log.e(TAG, "bad menuInfo", e); 
     return; 
    } 
    long l = getListAdapter().getItemId(info.position); 
} ` 
+0

這是如何回答這個問題? – Marmoy

2

很遺憾,超過3年後仍然沒有performItemLongClick()方法。

我知道這是一個解決方法,但您可以嘗試這一點 - 爲我工作:

AdapterView.OnItemLongClickListener listener = adapterView.getOnItemLongClickListener(); 
if (listener != null) { 
    listener.onItemLongClick(adapterView, view, position, id); 
} 

最後三個參數都是一樣的我們缺少performItemLongClick(...)方法會有。

1

我遇到了同樣的問題,我認爲最好的解決方案就是使用Robotium進行Android測試。它清理了我使用簡單方法的很多代碼。對於長時間點擊,它就像solo.clickLongInList(position)一樣簡單。

相關問題