2015-02-11 86 views
0

我有一個使用CursorAdapter的藥物ListView。我的目標是在用戶按下提交按鈕時獲取對所選項目的光標的引用,但我一直得到空值。這裏是我當前的代碼:在ListView中,哪些操作觸發onItemSelected?

mSubmitButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Cursor selectedMedication = (Cursor) mMedicationListView.getSelectedItem(); 
     if(selectedMedication != null) 
     { 
      MedicationSelectionListener activity = (MedicationSelectionListener) getActivity(); 
      activity.onMedicationSelected(new Medication(selectedMedication)); 
     } else{ 
      Toast.makeText(getActivity(), "Must select a medication.", Toast.LENGTH_SHORT).show(); 
     } 
    } 
}); 

當此執行,selectedMedication始終爲空。我已經實現了一個可繪製的selector.xml文件,該文件在按下時改變了項目的背景色,並且工作正常,所以我覺得單擊該項目就足夠了。

我也曾嘗試以下,每個項目被點擊時設置選擇的藥物變量:

mMedicationListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     Cursor c = (Cursor) mMedicationListView.getItemAtPosition(position); 
     if(c.moveToFirst()) 
      mSelectedMedication = new Medication(c); 
    } 
}); 

這工作得很好,但我覺得它預製一堆毫無意義的操作時,所有我感興趣in是最終選定的項目。應該點擊一個項目觸發器mMedicationListView.onItemSelected()?如果不是,那麼採取什麼行動來確保發生?

+0

你是什麼意思的「一堆毫無意義的行動」? – Emmanuel 2015-02-11 17:36:34

+0

@Emmanuel比方說,我有一個很大的列表藥物,並由於某種原因,用戶上下選擇每一個。每次我改變那個班級的領域(這不是一個沉重的操作,我都明白了),但是爲什麼當我應該能夠在最後閱讀選定的項目時浪費時間呢? – AdamMc331 2015-02-11 17:38:30

回答

2

所以我的印象是點擊這個項目就夠了。

點擊並非選擇ListView。將發生的選擇既可以當:

  • 您設置一個選擇編程,或

  • 用戶使用五嚮導航選項(例如,d-墊,軌跡球,方向鍵),並按下了/向下對以移動高亮條左右

所有我感興趣的是最終選定的項目

A ListView默認情況下是一個命令窗口小部件。當用戶點擊ListView中的一行時,您的應用應該執行某些操作,通常會一路擺脫ListView

如果OTOH,用戶選擇東西,其中列表和選擇保持在屏幕上(例如,主細節模式,選擇州/省作爲填寫地址的一部分),那麼您應該正在使用選擇模式。這可能是一種單選模式(通常用單選按鈕沿着右邊緣表示),多選模式(通常用右邊的複選框表示)或多選模態模式(通常用「激活」模式表示)狀態設置一個永久高亮,通常保留用於主 - 細節種類的場景)。

不是試圖超載「選擇」,意思是「選擇」。這聽起來像你正在展示一個ListView作爲更大的東西的一部分,用戶正在做出選擇,所以使用一個選擇模式。

+0

感謝您澄清區別,我不知道它是特定於您提到的導航選項。 ListView已經是單一的選擇。我應該繼續使用「onClick」方法來處理這個問題嗎? – AdamMc331 2015-02-11 17:49:59

+1

@ McAdam331:如果它是單選列表,您可以通過'ListView'上的'getCheckedItemPosition()'調用用戶選擇的內容。 – CommonsWare 2015-02-11 18:05:44

+0

好吧,我明白了。再次感謝你的幫助。 – AdamMc331 2015-02-11 18:24:38

相關問題