嗨,我对Android很新,还在学习。我的问题是,例如我有一个在MainActivity中创建的方法,我需要从另一个类调用它。
获取MainActivity的实例是否是一个好习惯,以便我可以从另一个类调用MainActivity中的方法?
这是一个例子:
row←2
⎕←col←nlm[row;]⍳2
4
nlm[;col] ⍝ values in matched column
4 2
然后这是另一个类:
public class MainActivity extends AppCompatActivity {
private static MainActivity inst;
public static MainActivity instances()
{
return inst;
}
@Override
public void onStart() {
super.onStart();
inst = this;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void showToast (String text){
Toast.makeText(inst, text, Toast.LENGTH_SHORT).show();
}
我在看教程时看到了这种类型的编码,并想知道这是一个好习惯还是可能有更好的方法?由于我收到不要将Android上下文类放在静态类
中的警告提前感谢您的任何见解或帮助! :d
答案 0 :(得分:0)
我想你想制作一个活动类的单身
但在所有模式设计
中提及使用Singleton
If和Only如果它是唯一的方式来创建一个全局变量
Singleton 基于Lazing Initialing和Load On Memory
所以我想如果你不能与Activiy交互你可以使用
BroadCast 或意图
答案 1 :(得分:0)
获取MainActivity的实例是一种好习惯 我可以从另一个调用MainActivity中的方法 类?
你完全可以做到这一点,但你不需要让它静态并使用构造函数。只需创建一个如下所示的新实例,您就可以访问公共方法
MainActivity mainActivity = new MainActivity();
mainActivity.showToast(text);
关于警告
它建议避免将上下文字段定义为静态。警告本身解释了原因:它是内存泄漏。如果你将它设为静态,它将可以在你的应用程序的任何地方访问,并且一些方法可以在很长一段时间内保持对该上下文的引用,并且它不会被垃圾收集。这将导致outofmemory异常,应用程序可能会崩溃。但是在这里你试图从broadcastreceiver调用showToast()
,这样你就可以摆脱静态引用。而且你将来需要它们以安全的方式注入上下文
答案 2 :(得分:0)
您可以从另一个类调用方法:
MainActivity instance = new MainActivity();
String data = instance.data();
并在该类中创建数据方法:
public String data() {
return mangaId;
}
答案 3 :(得分:0)
您无法使用Activity
运算符创建new
的实例。
您必须使用Intent
来创建活动。
因此,您无法获得对活动实例的引用。
您可以使用活动类的唯一方法是静态方法。