应用程序中可用的方法?

时间:2011-07-04 02:25:04

标签: java android methods

我百分百肯定这将是其中一个新手问题,但在这里它会......

有没有办法可以在一个活动中编写一个方法,并且能够从其他活动中访问它?

实施例: 我的应用程序中有六个活动,每个活动都有自己的menu.xml,因为每个选项可用的选项都不同,我有这些菜单& menuitems如图所示设置:

@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 个答案:

答案 0 :(得分:2)

您在每项活动中都有类似的菜单项吗?即相同数量的物品但行为不同?如是... 如何创建覆盖onCreateOptionsMenu和onOptionsItemSelected()方法的BaseActivity ..(正如您在上面的例子中给出的那样)。您的所有活动都应该从此BaseActivity继承,然后覆盖菜单处理方法。例如。 helpDialogGo()将转到新类。

因此BaseActivity将具有onCreateOptionsMenu和onOptionsItemSelected()方法。加上所有的menuItem动作(即helpDialogGo()等)作为空方法。继承的类将覆盖menuItem Actions。

如果每个活动的菜单项不相似,最好为每个活动创建菜单。

修改

不确定您的期望更多。我以为我说清楚了。让我再试一次。

班级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 :(得分:1)

当然,一种方法是创建一些封装所需功能的自定义类 - 并在您的活动中使用它们。这比将实现直接放在Activity本身(所有事情都是平等的,并且基于你到目前为止所描述的内容)更好的抽象。

任何时候你发现自己重复了一个标志,这是一个标志,提醒你这是一个将代码推送到自己的类中的好地方 - 通常。