所以,我正在阅读this earlier question,了解如何允许我点击列表中的项目来执行一个操作或长按该项目以切换到ActionMode,我可以在其中选择多个项目并使用ActionBar对这些项目做了些什么。但是,我遇到了this answer的问题。具体来说,我将其实现为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.*;
答案 0 :(得分:6)
作为a kind person from reddit has notified me,显然ActionBarSherlock目前不支持MultiChoiceModeListener。当侦听器想要原生的Android菜单时,我正在使用ActionBarSherlock的菜单,这也可能导致这个问题。
答案 1 :(得分:1)
如果您正在使用Eclipse,我将删除所有import
指令,然后按 Ctrl + Shift + o (对于Mac, Cmd + Shift + o ),并且非常谨慎地根据冲突选择导入。
我现在的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
转换为SherlockActivity
时,我确实遇到了您所描述的确切问题。
编辑:将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)
答案 2 :(得分:0)
确保导入这两个类而不是vanilla android版本:
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
此外,我尝试导入ActionBarSherlock demo project并查看ActionItem示例是否在那里工作。