ListActivity 中的 AndroidAnnotations 和上下文菜单

标签 android contextmenu listactivity android-annotations

我有一个继承自 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/

相关文章:

android - 我怎样才能在 Kotlin 中简化这个单例?

android - 如何检查JSON中的值

android - 列表 Activity Android 的自定义布局

android - 过滤列表 Activity

android - 如何在 ListView 中的按钮上设置 OnclickListener()?

Android:无法理解这个异常

javascript - 代码不适用于 Phonegap 应用程序 -Android

WPF 将 ContextMenu 绑定(bind)到 VM 中的 ContextMenu 属性

javascript - contenteditable <div> 上下文菜单中的新元素

c# - 将可观察集合绑定(bind)到上下文菜单