我有一个继承自 ListActivity 并使用 AndroidAnnotations 的 Activity 。虽然 .onListItemClick
工作正常,但列表项的上下文菜单根本没有出现,甚至 .onCreateContextMenu
也没有被调用,但是 .onListItemClick
长按列出项目后触发。这是我的代码:
@OptionsMenu(R.menu.places)
@EActivity(R.layout.places)
public class PlacesPicker extends ListActivity {
private static String[] DATA_SOURCE = { PlacesDB.PLACE_NAME, PlacesDB.PLACE_DESC };
private static int[] DATA_DESTINATION = { R.id.place_name, R.id.place_desc };
public static ListView lv;
@Bean
PlacesDB db;
Cursor cursor;
@AfterInject
public void init() {
cursor = db.getPlaces(null, null);
startManagingCursor(cursor);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.place_item, cursor, DATA_SOURCE, DATA_DESTINATION);
setListAdapter(adapter);
lv = getListView();
registerForContextMenu(lv);
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
// It works fine
// It works even after long tap instead of context menu!
Toast.makeText(this, "Item clicked!", Toast.LENGTH_SHORT).show();
}
@OptionsItem
public void addPlace(){
// It works OK too
startActivity(new Intent(this, PlaceEditor_.class));
}
public void editPlace() {
// ...skipped for brevity...
}
public void deletePlace() {
// ...skipped...
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
// This isn't ever called!
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.place_options, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
// ...skipped...
}
}
谁能告诉我这里出了什么问题?感谢您的提前。
最佳答案
我明白了!这是我自己的错误:.init()
方法必须注释为 @AfterViews
, 不像 @AfterInject
.它是这样工作的:ListActivity 在创建时有一个默认的 ListView,然后注入(inject)我的 bean PlacesDB,然后触发 @AfterInject
方法,即 .init()
其中默认 ListView 注册了上下文菜单,在那之后 我的R.layout.places
被设置为 Activity 的内容 View ,另一个 ListView 未注册!因此,将注释更改为 @AfterViews
使 .init()
在 .setContentView(R.layout.places)
之后运行然后我自己的布局中的 ListView 被注册到上下文菜单中,一切都开始工作了:)
关于ListActivity 中的 AndroidAnnotations 和上下文菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11419205/