2014-02-26 103 views
1

這個thread的答案沒有任何幫助。
我有一個要求I want to do something when user long presses on CheckBoxPreference。我正在動態創建CheckBoxPreference。我使用下面的代碼來填充視圖:是否可以將長按偵聽器添加到CheckBoxPreference?

m_PreferenceScreen = getPreferenceManager().createPreferenceScreen(this);  
m_PreferenceCategory = new PreferenceCategory(this);  
m_CheckBoxPreference = new CheckBoxPreference[m_Cursor.getCount()]; 
int i = 0;  
while (m_Cursor.moveToNext()) {  
    //Create checkbox instances here  
    m_CheckBoxPreference[i].setOnPreferenceChangeListener(this);  
    m_PreferenceCategory.addPreference(m_CheckBoxPreference[i++]);  
}  
setPreferenceScreen(m_PreferenceScreen);  

在我試圖達到什麼目的?
我在數據庫中有幾個條目。我想填充與數據庫中每個條目相對應的複選框列表(我可以用上面的代碼來完成)。現在我的要求是,當用戶長按任何複選框時,它應該做一些事情(說,打開一個對話框)。

這個東西是否可以通過上面的代碼實現?
我也將欣賞任何替代解決方案。不過,我寧願採用第一種方法。

回答

0

我設法做到了這一點。下面的技巧適用於我。

ListView listView = getListView(); 
listView.setOnItemLongClickListener(this); 

@Override 
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 
    ListView listView = (ListView) parent; 
    ListAdapter listAdapter = listView.getAdapter(); 
    Object obj = listAdapter.getItem(position); 
    if (obj != null && obj instanceof View.OnLongClickListener) { 
     View.OnLongClickListener longListener = (View.OnLongClickListener) obj; 
     return longListener.onLongClick(view); 
    } 
    return false; 
} 
0

我不確定CheckBoxPreference是否有長按組件。您可能需要評估您的UX,以查看是否可以用不同的UI組件替換該操作。也許這是一個普通的偏好,當點擊打開您的詳細信息以及可以檢查的複選框。

如果這不符合您的需要,您可以手動創建可自動加載/更新共享首選項對象的複選框視圖。我相信標準視圖複選框可以長時間按下。這可能是一些取樣,因爲我從來沒有直接試圖長按複選框。如果你不能,你可能需要創建一個複選框和一個單獨的組件,其中包含要長時間按下的文本。

相關問題