7

Por lo tanto, estaba leyendo this earlier question para obtener ideas sobre cómo permitirme hacer clic en un elemento de una lista para hacer una acción o mantener presionado ese elemento para cambiar a un modo de acción donde puedo seleccionar varios elementos y usa la Barra de acciones para hacer algo con esos elementos. Sin embargo, tengo problemas con this answer. Específicamente, estoy implementando esto en un SherlockListFragment (usando ActionBarSherlock). Sin embargo, en el momento en que declaro un nuevo MultiChoiceModeListener, Eclipse arroja un par de errores de compilación.MultiChoiceModeListener causando problemas con 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 

Estos desaparecen en el momento en que elimino MultiChoiceModeListener. No tengo idea de qué podría estar causando esto, ya que no hay nada extraño que yo sepa.

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); 
     }  
    } 

Estoy muy confundido. ¿Por qué la implementación de MultiChoiceModeListener significa que no puedo anular OnOptionsItemSelected?

EDITAR: Para ayudar a aclarar, aquí están mis importaciones.

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

Pruebe esto http://stackoverflow.com/questions/14737519/implementing-multi-selection-and-contextual-actionmode-in-actionbarsherlock/14737520#14737520 –

Respuesta

6

Como a kind person from reddit has notified me, al parecer ActionBarSherlock no es compatible actualmente con MultiChoiceModeListener. El hecho de que estoy usando los menús de ActionBarSherlock cuando el oyente quiere menús nativos de Android probablemente también contribuyan al problema.

0

Asegúrese de que va a importar estas dos clases y no las versiones de vainilla android:

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

también, que iba a tratar de importar el ActionBarSherlock demo project y ver si el ejemplo ActionItem trabaja allí.

+0

Tengo una importación com.actionbarsherlock.view. *; y ninguna otra importación que podría referirse a los menús. – MowDownJoe

1

Si utilizas Eclipse, me gustaría borrar todos sus import directivas, y golpeó Ctrl +Shift +o (Cmd +Shift +o para Mac), y MUY cuidadosamente elija importaciones basadas en los conflictos.

Mis SherlockActivites actuales, que ciertamente no utilizan fragmentos están haciendo:

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; 

tuve los problemas exactos que describían cuando estaba en la conversión de mis Activity s a SherlockActivity s.

EDIT: Adición de la interfaz MultiChoiceModeListener a mi clase causados ​​métodos como los siguientes: a generarse

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

en cuenta que el Menultem está plenamente cualificado. Esto puede ser una pista aquí. Tal vez estás tratando de pasar un menú de Sherlock a algo que espera un menú de Android.

Supongo que mi consejo sería tratar de calificar todas sus llamadas posiblemente en conflicto, y después de averiguar qué métodos se están llamando incorrectamente, vaya desde allí.

Por ejemplo, cambie:

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 

Para:

public void onCreateOptionsMenu(Fully.Qualified.Path.Menu menu, MenuInflater inflater) 
Cuestiones relacionadas