使用另一个活动中的活动方法

时间:2011-05-11 19:29:53

标签: android android-activity toast

我有一些游戏的“主要”活动,我创建了一个类,包括将在各种主要活动中使用的所有方法。

一种方法是:

    public void printMessage(String message, int time)
    {
       Toast toastMessage = Toast.makeText(this, "", Toast.LENGTH_SHORT);
       toastMessage.setText(message);
       toastMessage.setDuration(time);
       toastMessage.show();
    }

显然,这个方法要求类扩展Activity,所以我猜这就是问题。

我读到了关于使用Intent和putExtra,getExtra ......但在这种情况下这将是一种过度杀伤力。 我知道这个printMessage并不能证明一个新类的合理性,但是我有更多的方法可以做,那些也需要Activity。

我必须提一下,我是Android的新手,也是Java新手。现在我已经习惯了Java创建对象的方法,然后用该对象进行方法调用。这就是我在这里尝试的方式,但它只适用于“常规类”,而不适用于活动类。

谢谢。

2 个答案:

答案 0 :(得分:4)

该类不需要扩展Activity,只需通过添加一个额外的参数将调用Activity的Context传递给printMessage方法......

public void printMessage(Context context, String message, int time) {
    Toast toastMessage = Toast.makeText(context, "", Toast.LENGTH_SHORT);
    ...
}

编辑:回复您的评论......

据我所知,你创建了一个'helper'类,它不是Android特有的,但需要使用Android元素(例如Context of Activities,SharedPreferences等)。在很多情况下,这些东西可以按照我上面演示的方式传递给助手类的各种方法(没有问题)。

  

它确实有效,但不幸的是,现在我收到太多的ToastMessages。

好的,显然它是在之前的Toast超时之前被重复调用的。尝试将'toastMessage'作为助手类的实例成员......

public class MyHelper {

    Toast toastMessage = null;

    public void printMessage(Context context, String message, int time) {
        if (toastMessage != null)
            toastMessage.cancel();
        toastMessage = Toast.makeText(context, "", Toast.LENGTH_SHORT);
        ...
    }
}
  

不幸的是,getSharedPreferences()确实需要Activity,或者至少需要我调用它的方式。

同样,你的'helper'类的任何方法都可以传递给任何调用它们的Activity的Context,这可以用来获取首选项等。

或者,如FvZ所述,您可以扩展Application类并提供对应用程序范围的共享首选项的访问...

public class MyApp extends Application {

    protected static SharedPreferences UserPrefs = null;

    @Override
    public void onCreate() {
        super.onCreate();
        UserPrefs = getSharedPreferences("MyAppPrefs", MODE_PRIVATE);
    }
}

所有活动都可以简单地使用(例如)......

MyApp.UserPrefs.putString(...);

在这种情况下,您还可以将助手类创建为应用程序的静态成员,使其可以从所有活动中访问。

  

是否有更简单的方法来使用类似于常规Java的方法?

要掌握的一件事是Android确实使用'常规'Java ...就像Android Activity类这样的东西是一个非常特殊的情况。当一个活动涵盖另一个活动时,您无法保证第一个活动将保持多久。在许多情况下,它会很快被销毁 - 因此,您不能依赖于能够从一个Activity中调用另一个Activity中的方法。它也不是Android的工作方式。

答案 1 :(得分:0)

另一种方法是扩展您的应用程序,它将为您提供一个将持久存储到所有应用程序的对象,然后您可以将指向您的活动的指针传递给您需要的所有其他活动