如何将某些活动的上下文作为参数传递

Posted

技术标签:

【中文标题】如何将某些活动的上下文作为参数传递【英文标题】:How to pass the context of some activity as an argument 【发布时间】:2018-02-25 16:03:54 【问题描述】:

我想知道如何将活动的上下文从ClassA.java 发送到MainAddingItems.java

我可以将MainActivity.class 作为参数传递,但我无法传递上下文。

这里是ClassA调用MainAddingItems的构造函数的部分代码

new MainAddingItems(MainActivity.class,"MainActivity Clicked",R.id.activity_main_linearLayout,"Profile Acitvity")

【问题讨论】:

How can "this" of the outer class be accessed from an inner class?的可能重复 【参考方案1】:

它将起作用..确保您将其声明为公共和静态的,如下所示

公共静态上下文上下文; 在你的主要活动中

您可以在整个项目中使用该上下文的任何位置

【讨论】:

不要这样做。众所周知,static Context 是android 内存泄漏的第一个来源。更糟糕的是,从课外引用它......【参考方案2】:

你可以这样做。如果你的构造函数是:

MainAddingItems(Context context) ...

然后从Activity1 你可以这样做:

Context context = Activity1.this; // Or getApplicationContext() or View.getContext() or whatever context you want


MainAddingItems(context);

【讨论】:

【参考方案3】:

将您的 MainAddingItem 类的构造函数设为这样,

class MainAddingItem 
Context context;

MainAddingItem (Context context, rest of the parameters)
this.context = context;


使用上面的构造函数,并在构造函数的参数中传递活动的上下文。

new MainAddingItem (this, rest of the parameters);

【讨论】:

【参考方案4】:

实际上你在这里传递了上下文。在 android 上下文中是应用程序的当前状态。举个例子,如果你在一个活动中,那么上下文就是活动类本身,对于服务和android的任何其他组件都是如此

让我再举一个例子,

只要尝试在任何活动的onCreate 方法中显示敬酒消息,考虑到您的活动名称是SimpleActivity,您可能会写这样的内容

Toast.makeText(this "Understating context",Toast.LENGTH_LONG).show();

或者你可以写如下

Toast.makeText(SimpleActivity.this "Understating context",Toast.LENGTH_LONG).show();

第一个 parameter of makeText 方法是 context ,如果你只是通过类它就可以工作。

这就是您将活动作为参数传递的方式

public SimpleClass
  AppCompatActivity mActivity;

  public SimpleClass(AppCompatActivity mActivity)
      this.mActivity = mActivity;
  



public class MainActivity extends AppCompatActivity 
    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        SimpleClass newSimpleClass = new SimpleClass(MainActivity.this);

    

【讨论】:

那么我怎样才能将活动作为参数传递?【参考方案5】:

只需像在 MainActivity 中一样将 Context 设为静态即可。

公共静态上下文 contextToUse;

你可以像下面这样使用: MainActivity.contextToUse

如果对你有帮助,请告诉我

【讨论】:

不,context 不应存储在静态变量中,Android Studio 会指出这一点。 请查看以下链接 https://itekblog.com/android-context-in-non-activity-class/

以上是关于如何将某些活动的上下文作为参数传递的主要内容,如果未能解决你的问题,请参考以下文章

如何将 java 类名作为参数传递并将其用作方法中的强制转换

淘汰绑定上下文将父级作为参数传递

如何在oracle中将对象类型的对象作为参数传递

为啥我们将视图和上下文对象作为函数中的参数传递,API 22 [关闭]

如何检查 googlemock 中作为 void 指针传递的字符串参数

如何访问对象而不将其作为参数传递?