ListActivity中的AndroidAnnotations和上下文菜单

ListActivity中的AndroidAnnotations和上下文菜单,android,contextmenu,listactivity,android-annotations,Android,Contextmenu,Listactivity,Android Annotations,我有一个从ListActivity继承的活动,并使用AndroidAnnotations。虽然.onListItemClick工作正常,但列表项的上下文菜单根本不会出现,甚至不会调用。onCreateContextMenu,但是.onListItemClick会在长时间点击列表项后激发。这是我的密码: @OptionsMenu(R.menu.places) @EActivity(R.layout.places) public class PlacesPicker extends ListActi

我有一个从ListActivity继承的活动,并使用AndroidAnnotations。虽然
.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()
方法必须注释为
@afterview
,而不是
@AfterInject
。它的工作原理如下:ListActivity在创建时有一个默认的ListView,然后注入my beanPlacesDB,然后激发
@AfterInject
方法,即
.init()
,其中默认的ListView被注册为上下文菜单,然后,我的
R.layout.places
被设置为另一个未注册的ListView活动的内容视图!因此,将注释更改为
@afterview
会使
.init()
.setContentView(R.layout.places)
之后运行,然后布局中我自己的ListView被注册到上下文菜单中,一切都开始工作:)

我明白了!这是我自己的错误:
.init()
方法必须注释为
@afterview
,而不是
@AfterInject
。它的工作原理如下:ListActivity在创建时有一个默认的ListView,然后注入my beanPlacesDB,然后激发
@AfterInject
方法,即
.init()
,其中默认的ListView被注册为上下文菜单,然后,我的
R.layout.places
被设置为另一个未注册的ListView活动的内容视图!因此,将注释更改为
@afterview
会使
.init()
.setContentView(R.layout.places)
之后运行,然后在上下文菜单中注册布局中我自己的ListView,一切开始工作:)