如何将某些活动的上下文作为参数传递
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 类名作为参数传递并将其用作方法中的强制转换
为啥我们将视图和上下文对象作为函数中的参数传递,API 22 [关闭]