我负责的片段。
我有一个Activity
和不同fragments
。
每个fragment
需要访问一个Class(call it X)
允许它访问数据库,但是,因为我有很多碎片,我不希望创建的不同实例Class X
在每一个片段,我认为这将需要大量的memory
。
所以,我该怎么办?
我写了这样的事情(吸气剂),但它不工作!
public class MyActivity {
private ClassX classx;
.....
public ClassX getClassX() {
return classx;
}
.....
}
但不是,我怎么能调用它的fragment
?
这是一点点的一个Java问题和Android。
如果你在看访问数据库,看看创建数据库单。
因此,像:
public class Database {
// This starts off null
private static Database mInstance;
/**
* Singleton method, will return the same object each time.
*/
public static final Database getInstance() {
// First time this method is called by Database.getInstance() from anywhere
// in your App. It will create this Object once.
if(mInstance == null) mInstance = new Database();
// Returns the created object from a statically assigned field so its never
// destroyed until you do it manually.
return mInstance;
}
//Private constructor to stop you from creating this object by accident
private Database(){
//Init db object
}
}
因此,然后从你的碎片和活动,你可以再放置在你的类的以下字段(更好地利用使用基本活动和片段,以节省您的重复代码)。
public abstract class BaseFragment extends Fragment {
protected final Database mDatabase = Database.getInstance();
}
那么你的具体片段可以扩展你的BaseFragment
如SearchListFragment extends BaseFragment
希望这可以帮助。
值得一读的关于单身和数据库
问候,克里斯
从片段致电您的活动的方法
((MyActivity ) getActivity()).getClassX() ;
你有其他投需要完成:
Activity activity123 = getActivity();
if(activity123 instanceof ParentActivity) {
((ParentActivity) activity123).someMethodInParentActivity();
}
定义所谓的接口Callbacks
(或者,如果你想要别的东西)。 在这里面,有一个名为公共方法getClassX()
然后,让您的活动实现Callbacks
接口。
在你的片段,在onAttach
,存储到基准Callbacks
对象(即你通过类似的活动:
if(activity instanceof Callbacks)
mCallbacks = (Callbacks)activity;
这将保证该片段能够调用的函数。 (如果你想在另一个应用程序后重新使用的片段)
然后在您的活动中onCreate()
创建一个实例ClassX
。 在您的getClassX()
方法,只返回对它的引用。
当你想从你的片段的引用,调用mCallbacks.getClassX()
你应该进行排序。
您可以在活动中使用一个静态的对象,并从片段使用它,或致电getActivity()方法,在你的片段,以访问整个活动的对象/方法