Android onCreateOptionMenu не вызывается - PullRequest
0 голосов
/ 04 февраля 2012

Я реализую действие Android, из которого будут получены другие действия. Итак, в основном у меня есть эта настройка InventoryActivity и его родительского класса, ListActivity:

public class MyListActivity extends Activity {  
    protected Context mContext;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mContext = this.getBaseContext();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.options, menu);
        Log.d("Creating options menu", "True");
        return true;
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        Log.d("Preparing options menu", "True");
        return super.onPrepareOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.save:
            return(true);

            case R.id.revert:
            return(true);
        }

        return(super.onOptionsItemSelected(item));
    }
}


public class InventoryActivity extends MyListActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.inventory);
    }
}

И у меня это тоже есть в options.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/card_list_save"
          android:icon="@drawable/ic_menu_save"
          android:title="Save"/>
    <item android:id="@+id/card_list_revert"
          android:icon="@drawable/ic_menu_revert"
          android:title="Revert" />
</menu>

При необходимости это мой макет для инвентаря. Xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <Button
        android:id="@+id/callSearch"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Search"/>

    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:id="@+id/inventory"/>
    </ScrollView>
</LinearLayout>

Однако, когда я нажимаю кнопку меню, ничего не происходит. Сообщения журнала в методе onCreateOptionsMenu не отображаются. Вместо этого я вижу только следующее:

02-04 11:36:58.313: W/KeyCharacterMap(31464): No keyboard for id 0
02-04 11:36:58.313: W/KeyCharacterMap(31464): Using default keymap: /system/usr/keychars/qwerty.kcm.bin

Но больше всего меня сбивает с толку то, что этот код работает в других видах деятельности, таких как мой вид деятельности запуска. Но согласно концепции объектно-ориентированного программирования InventoryActivity должна вызывать переопределяющие методы в MyListActivity. Я полностью застрял, и мне нужна помощь.

Ответы [ 2 ]

3 голосов
/ 04 февраля 2012

ListActivity уже является классом в Android SDK. Я предполагаю, что вы импортируете android.app.ListActivity, а не свою посылку.

0 голосов
/ 05 февраля 2012

Хм ... не знаю почему, но удаление метода onCreate в MyListActivity решило проблему.Итак, класс теперь выглядит так:

public class MyListActivity extends Activity {  
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.options, menu);
        Log.d("Creating options menu", "True");
        return true;
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        Log.d("Preparing options menu", "True");
        return super.onPrepareOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.save:
            return(true);

            case R.id.revert:
            return(true);
        }

        return(super.onOptionsItemSelected(item));
    }
}
...