Как расширить SomeActivity для перемещения, например, onCreateOptionsMenu? - PullRequest
2 голосов
/ 31 мая 2010

Я знаю, это должно быть довольно просто, но я все равно не понимаю.
У меня есть Activity (назовем это XyActivity ), которая стала довольно длинной. Поэтому я бы хотел переместить некоторые переопределенные методы в подкласс (назовем его XyOptions ). Выглядит так:

public class XyActivity extends Activity {
    XyOptions xyOptions;
    public void onCreate(Bundle savedInstanceState) {
        xyOptions = new XyOptions();
        ...
    }
}

и

public class XyOptions extends XyActivity {

    public EditImageOptions() {...}

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {...}

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {...}

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {...}

К сожалению, методы в XyOptions никогда не вызываются. И я не понимаю почему. Я уверен, что ответ тривиален, поэтому, пожалуйста, укажите мне в каком-то направлении.

Спасибо
Стеф

Ответы [ 2 ]

1 голос
/ 31 мая 2010

Я думаю, что вы пытаетесь сделать, это вызвать onCreateOptionsMenu в XyOptions, находясь в действии XyActivity, путем создания объекта XyOptions в XyActivity. Насколько я знаю, это невозможно. onCreateOptionsMenu вызывается только при нажатии кнопки меню на телефоне.

Вы должны исправить поток наследования, как уже отмечалось.

1 голос
/ 31 мая 2010

Вы неправильно понимаете наследство здесь. Если вы хотите заполнить меню в подклассе, попробуйте это:

public class XyActivity extends XyOptions {
    public void onCreate(Bundle savedInstanceState) {
       //.. other 
    }
}
public class XyOptions extends Activity {

    public EditImageOptions() {...}

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {...}

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {...}

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {...}
}
...