在另一个简单的 class 中使用 getApplicationContext(),而不是在 MainActivity.java 中

Using getApplicationContext() in another simple class, NOT in MainActivity.java

我为我的 Android 应用程序创建了一个简单的 class,名为 coreTuts。我已完成将它绑定到我的 MainActivity.javaactivity_main.xml 等,如下所示:

MainActivity.java

coreTuts tuts = new coreTuts();
 
public void displayToast(View view)
{
 tuts.sampleToast();
}
这就是我的 coreTuts.java 的样子:

coreTuts.java

public class coreTuts{

 
 //Do a toast notification
 public void sampleToast()
 {
  
  Toast toast = Toast.makeText(getActivity().getApplicationContext(),
          "This is a message displayed in a Toast",
          Toast.LENGTH_SHORT);
      
  toast.show();
 }

}

我无法决定是应该在我的 Toast 上使用 getActivity().getApplicationContext() 还是只使用 getApplicationContext(),因为这两个代码都不起作用。

事实上,这些是我的问题:

  1. 我理解 Android 中的环境有点像动物的栖息地。我这样看 getActivity()getApplicationContext() 对吗?
  2. 如何让 getApplicationContext() 在另一个 class 中工作,以便我可以 运行 我的 toast,或者这是否被允许?

谢谢!

你的 coreTuts 应该如下所示

public class coreTuts{


//Do a toast notification
public void sampleToast(Context context)
{

    Toast toast = Toast.makeText(context,
            "This is a message displayed in a Toast",
            Toast.LENGTH_SHORT);

    toast.show();
}

}

你可以像下面这样调用它,

coreTuts tuts = new coreTuts();

public void displayToast(View view)
{
   tuts.sampleToast(view.getContext());
}

注意:视图不能为空

因为您的 class CoreTuts 没有继承自 Activity 也没有继承任何其他 Context subclass(ActivityContext) 您无法按照您尝试的方式访问您的上下文。您需要明确地将其传递给您的 sampleToast 方法,如下所示:

public class coreTuts{

    //Do a toast notification
    public void sampleToast(Context context) {
        Toast toast = Toast.makeText(context,
                "This is a message displayed in a Toast",
                Toast.LENGTH_SHORT);
        toast.show();
    }

}

在你的 activity:

coreTuts tuts = new coreTuts();

public void displayToast(View view) {
    // Pass your activity as the context
    tuts.sampleToast(this);
}

在创建它的对象时将上下文传递给您的 coretuts class。你的 coretuts class 看起来像这样。

public class coreTuts{

private Context mContext;

public coreTuts(Context context) {
    mContext = context;
}

//Do a toast notification
public void sampleToast()
{

    Toast toast = Toast.makeText(mContext,
            "This is a message displayed in a Toast",
            Toast.LENGTH_SHORT);

    toast.show();
}

}

现在,当您在 MainActivity 中创建此 class 的对象时,只需传递上下文

// Pass your context. You can also use getApplicationContext() instead of MainActivity.this
coreTuts tuts = new coreTuts(MainActivity.this);

// You don't really need a view argument for this method. 
// It could just be public void displayToast() {...}
public void displayToast(View view)
{
    tuts.sampleToast();
}