提问者:小点点

如何将活动传递给另一个类中的函数?


我正在为学校构建一个shop项目,当我决定不要复制和粘贴一个在每个活动中显示没有互联网连接的函数时,我应该把它添加到我的项目经理类中,这不是一个活动,ShopManager。问题是,为了吐司,其中一个参数是吐司应该发生的活动,我还没有找到一种方法来做到这一点。我现在决定在添加任何互联网检查之前尝试吐司,这就是我到目前为止创建的:

这是在我的主页活动:

public class Home extends AppCompatActivity implements View.OnClickListener {

    ShopManager shopMng;
...
...
...
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);

        shopMng = new ShopManager();

        shopMng.toast(Home.this);
   }
}

在我的ShopManager课程中:

public class ShopManager {

    public void toast(Class cls) {
        Toast.makeText(cls.this, "Test", Toast.LENGTH_SHORT).show();
    }

}

我收到的错误消息是'com. example.Birmdayshop.ShopManager'中的'toast(java.lang.Class)'不能应用于'(com.example.birthdayshop.Shop)',我扣除的基本意思是cls参数的类型不正确。它应该是什么类型的变量才能在ALL活动中工作?提前非常感谢。


共2个答案

匿名用户

在您的ShopManager类中创建一个静态方法,该方法获取上下文并显示toast,如下所示:

public class ShopManager {
    static void toastMessage(Context context){
        Toast.makeText(context, "Test", Toast.LENGTH_SHORT).show();
    }
}

要从您的活动中调用它,请执行以下操作:

ShopManager.toastMessage(YourActivity.this);

匿名用户

要回答标题问题,我认为你必须向方法传递一个Intent,这在你的情况下没有太大的意义,例如,

Intent intent = new Intent(getApplicationContext(), Home.class);
shopMng.someMethod(intent);

要开始活动,你仍然需要一些上下文,所以这应该被视为解决方案,但可以为其他人回答标题问题。

标准方法是传递上下文或活动本身,因此要使您的程序正常工作,请尝试以下方式:

public class ShopManager {

    public void toast(Context context) {
        Toast.makeText(context, "Test", Toast.LENGTH_SHORT).show();
    }

}

或分别:

public class ShopManager {

    public void toast(Home home) {
        Toast.makeText(home, "Test", Toast.LENGTH_SHORT).show();
    }

}

就这样!您的Home活动已经正确调用了ShopManager类中的toast方法。祝你好运!