【发布时间】:2015-10-29 10:02:23
【问题描述】:
我是 android 新手,需要您的帮助。
我很好奇我所做的是否正确。
我的应用程序只有一个 Activity(MainActivity It's AppCompatActivity btw)。
但我使用了几个 Fragment 来代替。
一些片段包含一个必须有活动的对象(我称之为问题类)(虽然不是上下文)。
比如ListView的Adapter(或者类似的东西)来膨胀Layout
或 Dialog 必须膨胀 Layout 并需要 Context 来创建 AlertDialog.Builder 。
而且它(ProblemClass)不能调用 getActivity()。
在我看来,我有两个解决方案。
1.将 Activity 传递给 ProblemClass。
2.Holding Activity 在 Singleton 中用于整个应用程序的任何 Class。
我选择了后者。但是……
我在某处读到它可能会导致内存泄漏,对吧?
由于 Singleton-Object 存在整个应用程序生命周期。
.
.
这是我持有 Activity 的 Singleton。
我在 MainActivity 的 onCreate() 中调用 setMyActivity(MainActivity.this) 将其传递给 Singleton。
public class MyActivitySingleton
{
private AppCompatActivity mAppCompatActivity;
private MyActivitySingleton()
{
}
private static class MyActivitySingletonHolder
{
private static final MyActivitySingleton INSTANCE = new MyActivitySingleton();
}
public static MyActivitySingleton getInstance()
{
return MyActivitySingletonHolder.INSTANCE;
}
public AppCompatActivity getMyActivity()
{
return this.mAppCompatActivity;
}
public void setMyActivity(AppCompatActivity appCompatActivity)
{
this.mAppCompatActivity = appCompatActivity;
}
}
有什么建议吗?我该怎么办?
将 Activity 传递给 ProblemClass,如果它需要 Context。 Activity也可以作为Context?
谢谢。
【问题讨论】:
-
在
Fragment你可以使用getActivity()访问Activity -
是的,但在 ListView.Adapter 等其他类中不能。我该怎么办?
-
对于适配器,您可以将其作为参数传递
-
所以只需将 'Activity' 从 'Fragment' 传递给那个 ProblemClass 对吗?如果我在“单身人士”中持有“活动”,那是不是很糟糕?因为我必须将“活动”传递给当前工作的每个“片段”。至少它必须是一个有效的“片段”。是不是和在 Singleton 中持有 'Activity' 一样。
-
例如 ListView 的 Adapter(或类似的东西)来膨胀布局 ...只需通过构造函数传递 inflater 或上下文 ...只要
ProblemClass不存在比 Activity 本身更长,您仍然可以将 Activity 传递给构造函数并保留引用...如果ProblemClass的寿命比 Activity 长,您不应该这样做...
标签: android android-fragments android-activity android-context android-memory