Методы доступны в приложении? - PullRequest
2 голосов
/ 04 июля 2011

Я на 100% уверен, что это будет один из тех вопросов новичка, но здесь он идет ...

Есть ли способ, которым я могу написать метод в одном упражнении и иметь возможность доступаэто от других?

Пример: у меня есть шесть активностей в моем приложении, каждое со своим собственным menu.xml, потому что опции, доступные для каждого, должны отличаться, и у меня есть эти меню и пункты меню, настроенные как показано:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.calculator_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        //Handle item selection
        switch (item.getItemId()) {
        case R.id.menuItem_calculator_Help:
            helpDialogGo();
            return true;
        case R.id.menuItem_calculator_Settings:
            //settingsActivityGo();
            return true;
        case R.id.menuItem_calculator_Share:
            shareGo();
            return true;
        case android.R.id.home:
            // app icon in Action Bar clicked; go home
            Intent uptohome = new Intent(this, Main.class);
            uptohome.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(uptohome);
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }

Примером одного из этих методов является:

private void helpDialogGo() {
        Toast.makeText(this, "help", Toast.LENGTH_LONG).show();
        AlertDialog.Builder alt_bld = new AlertDialog.Builder(this);
        alt_bld.setMessage("Sorry, no help has been written since this application is still in development. This is a prerelease version.")
        .setCancelable(false)
        .setPositiveButton("Cool", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
        // Action for 'Yes' Button
        dialog.cancel();
        }
        })
        .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
        //  Action for 'NO' Button
        dialog.cancel();
        }
        });
        AlertDialog alert = alt_bld.create();
        // Title for AlertDialog
        alert.setTitle("Pixel Help");
        // Icon for AlertDialog
        alert.setIcon(R.drawable.question);
        alert.show();
    }

Так есть ли способ использовать этот пользовательский метод совместно для всех действий и запускать его, когда кнопканажимается в каждом из них, чтобы избежать репликации большого количества кода в моем приложении?

И если так, есть ли какие-нибудь пробоины, на которые я могу попасть?(Некоторые пункты меню будут вызывать диалоги, другие приведут пользователя к новому занятию)

Ответы [ 2 ]

2 голосов
/ 04 июля 2011

У вас есть похожие пункты меню в каждом упражнении?т.е. одинаковое количество предметов, но разное поведение?Если да ... Как насчет создания BaseActivity, которое переопределяет методы onCreateOptionsMenu и onOptionsItemSelected () .. (Как вы указали в примере выше).Все ваши действия должны наследоваться от этой BaseActivity, а затем переопределять методы обработки меню.например.helpDialogGo () перейдет в новый класс.

, поэтому у BaseActivity будут методы onCreateOptionsMenu и onOptionsItemSelected ().Плюс все действия menuItem (т.е. helpDialogGo () и т. Д.) Как пустые методы.Унаследованные классы будут переопределять действия меню.

Если элементы меню не похожи в каждом упражнении, вам лучше создать меню для каждого занятия.

РЕДАКТИРОВАТЬ:

Не уверен, что выожидать большего.Я думал, что ясно дал понять.Позвольте мне повторить попытку.

Класс BaseActivity расширяет Activity.

BaseActivity extends Activity {

    // Copy your onCreateOptionsMenu() and onOptionsItemSelected() methods here

    protected void helpDialogGo() { }

    // ... other methods
}

Класс MyActivity1 расширяет BaseActivity.

MyActivity1 extends BaseActivity {

    // Copy your helpDialogGo() code in full here and then make
    // any specific changes to menu behaviour based on activity.

}

Класс MyActivity2 расширяется BaseActivity

MyActivity2 extends BaseActivity {
    // Copy your helpDialogGo() code in full here and then make
    // any specific changes to menu behaviour based on activity.
}
1 голос
/ 04 июля 2011

Один из способов, разумеется, состоит в том, чтобы создать несколько пользовательских классов, которые инкапсулируют желаемую функциональность, и использовать их в своих действиях.Это лучшая абстракция, чем размещение реализации непосредственно в самих Activity (ях) (все вещи равны и основаны на том, что вы уже описали).

Каждый раз, когда вы обнаруживаете, что дублируете имплементацию, флаг напоминаетвам это хорошее место, чтобы свернуть этот код в свой собственный класс - обычно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...