7

Tak więc czytałem this earlier question w celu uzyskania pomysłów, w jaki sposób mogę kliknąć element na liście, aby wykonać jedną akcję, lub nacisnąć i przytrzymać ten element, aby przełączyć na tryb akcji, w którym mogę wybrać wiele elementów i użyj ActionBar, aby zrobić coś z tymi elementami. Mam jednak problemy z this answer. W szczególności implementuję to w SherlockListFragment (przy użyciu ActionBarSherlock). Jednak w momencie, gdy deklaruję nowy MultiChoiceModeListener, Eclipse zwróci parę błędów kompilacji.MultiChoiceModeListener powoduje problemy z programem SherlockListFragment

Description Resource Path Location Type 
Cannot override the final method from SherlockListFragment DateTimeListFragment.java /path/to/my/project line 127 Java Problem 
The method inflate(int, Menu) in the type MenuInflater is not applicable for the arguments (int, Menu) DateTimeListFragment.java /path/to/my/project line 125 Java Problem 

Te idą w momencie, gdy usuwam MultiChoiceModeListener. Nie mam pojęcia, co mogło być przyczyną tego, ponieważ wiem, że nie dzieje się nic dziwnego.

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 
    { 
     //super.onCreateOptionsMenu(menu, inflater); 
     inflater.inflate(R.menu.alarmsmenu, menu); //line 125 
    } 
    public boolean onOptionsItemSelected(MenuItem Item) //line 127 
    { 
     switch(Item.getItemId()) 
     { 
     case R.id.addAlarm: 
      addAlarm(); 
      return true; 
     case R.id.editAlarms: 
      return true; 
     default: 
      return super.onOptionsItemSelected(Item); 
     }  
    } 

Jestem bardzo zdezorientowany. Dlaczego wdrażanie MultiChoiceModeListener oznacza, że ​​nie mogę przesłonić OnOptionsItemSelected?

EDYCJA: Aby pomóc wyjaśnić, oto mój import.

import java.util.Calendar; 
import java.util.GregorianCalendar; 
import android.app.DatePickerDialog; 
import android.app.TimePickerDialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.support.v4.app.*; 
import android.support.v4.content.Loader; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AbsListView.MultiChoiceModeListener; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemLongClickListener; 
import android.widget.DatePicker; 
import android.widget.ListView; 
import android.widget.TimePicker; 

import com.actionbarsherlock.app.SherlockListFragment; 
import com.actionbarsherlock.app.ActionBar; //Yes, it's unused... 
import com.actionbarsherlock.view.*; 
import com.commonsware.cwac.loaderex.acl.*; 
+0

Spróbuj tego http://stackoverflow.com/questions/14737519/implementing-multi-selection-and-contextual-actionmode-in-actionbarsherlock/14737520#14737520 –

Odpowiedz

6

Jak a kind person from reddit has notified me, najwyraźniej ActionBarSherlock obecnie nie obsługuje MultiChoiceModeListener. Fakt, że używam menu ActionBarSherlock, gdy słuchacz chce natywnych menu Androida prawdopodobnie również przyczynia się do tego problemu.

0

Upewnij się importem tych dwóch klas i nie wanilii android wersjach:

import com.actionbarsherlock.view.Menu; 
import com.actionbarsherlock.view.MenuItem; 

Również chciałbym spróbować importowanie ActionBarSherlock demo project i sprawdzić, czy przykładem ActionItem tam pracuje.

+0

Mam import com.actionbarsherlock.view. *; i żadnego innego importu, który mógłby odwoływać się do menu. – MowDownJoe

1

Jeśli używasz Eclipse, chcę usunąć wszystkie dyrektyw import i uderzył Ctrl + Przesunięcie + o (Cmd + Shift, + o Mac), i BARDZO uważnie wybierają importowane produkty w oparciu o konflikty.

Moje obecne SherlockActivites, że wprawdzie nie używają fragmentów robią:

import com.actionbarsherlock.app.ActionBar; 
import com.actionbarsherlock.app.ActionBar.Tab; 
import com.actionbarsherlock.app.SherlockActivity; 
import com.actionbarsherlock.view.Menu; 
import com.actionbarsherlock.view.MenuItem; 

miałem dokładnie opisujące zagadnienia ty kiedy konwersja moje Activity s do SherlockActivity s.

EDIT: Dodawanie interfejsu MultiChoiceModeListener do mojej klasy spowodowane metod jak na poniższym być generowane:

public boolean onActionItemClicked(ActionMode mode, android.view.MenuItem item) 
{ 
    // TODO Auto-generated method stub 
    return false; 
} 

pamiętać, że MenuItem jest w pełni wykwalifikowany. To może być wskazówka tutaj. Być może próbujesz przekazać Menu Sherlocka do czegoś, co oczekuje Menu Androida.

Przypuszczam, że moja rada byłaby próbą zakwalifikowania wszystkich potencjalnie konfliktowych połączeń, a po ustaleniu, które metody są nieprawidłowo wywoływane, idź od tego.

Na przykład zmiana:

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 

Do:

public void onCreateOptionsMenu(Fully.Qualified.Path.Menu menu, MenuInflater inflater) 
Powiązane problemy