7

因此,我正在阅读这个较早的问题,以了解如何允许我单击列表中的项目以执行一项操作或长按该项目以切换到 ActionMode,我可以在其中选择多个项目并使用 ActionBar 做某事到那些项目。但是,我对这个答案有疑问。具体来说,我将其实现为 SherlockListFragment(使用 ActionBarSherlock)。然而,当我声明一个新的 MultiChoiceModeListener 时,Eclipse 会抛出一些编译错误。

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

这些在我删除 MultiChoiceModeListener 的那一刻就消失了。我不知道是什么原因造成的,因为我知道没有什么奇怪的事情发生。

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

我很困惑。为什么实现 MultiChoiceModeListener 意味着我不能覆盖 OnOptionsItemSelected?

编辑:为了帮助澄清,这是我的进口。

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.*;
4

3 回答 3

6

一位来自 reddit 的好心人通知我,显然 ActionBarSherlock 目前不支持 MultiChoiceModeListener。当听众想要原生 Android 菜单时,我使用 ActionBarSherlock 的菜单这一事实可能也导致了这个问题。

于 2012-06-15T02:07:06.970 回答
1

如果您使用的是 Eclipse,我会删除您的所有import指令,然后点击Ctrl++ (对于 Mac而言是Shift++ ),并根据冲突非常小心地选择导入。oCmdShifto

我目前的 SherlockActivites,诚然不使用碎片正在做:

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;

当我将我Activity的 s 转换为SherlockActivitys 时,我确实遇到了你所描述的确切问题。

编辑:MultiChoiceModeListener接口添加到我的类会导致生成如下方法:

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

请注意,MenuItem 是完全限定的。这可能是这里的一个线索。也许您正试图将 Sherlock 菜单传递给需要 Android 菜单的东西。

我想我的建议是尝试限定所有可能发生冲突的调用,然后在确定哪些方法被错误调用后,从那里开始。

例如,更改:

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)

到:

public void onCreateOptionsMenu(Fully.Qualified.Path.Menu menu, MenuInflater inflater)
于 2012-06-14T19:37:34.010 回答
0

确保您正在导入这两个类,而不是 vanilla android 版本:

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

另外,我会尝试导入 ActionBarSherlock演示项目,看看 ActionItem 示例是否在那里工作。

于 2012-06-14T01:09:11.283 回答