我正在处理碎片
我有一个Activity
和不同的fragments
每个fragment
都需要访问允许它访问数据库的Class(call it X)
,但是,因为我有很多片段,所以我不想创建{{1}的不同实例在每个片段中我认为它需要很多Class X
那我该怎么办?
我写了这样的东西(带有吸气剂),但它不起作用!
memory
但是,我怎样才能从public class MyActivity {
private ClassX classx;
.....
public ClassX getClassX() {
return classx;
}
.....
}
调用它?
答案 0 :(得分:12)
从片段中调用您的活动的方法
((MyActivity ) getActivity()).getClassX() ;
答案 1 :(得分:4)
你需要做额外的演员:
Activity activity123 = getActivity();
if(activity123 instanceof ParentActivity) {
((ParentActivity) activity123).someMethodInParentActivity();
}
答案 2 :(得分:3)
这有点像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
希望这有帮助。
值得一读singletons和database
此致 克里斯
答案 3 :(得分:2)
定义一个名为Callbacks
的界面(如果需要,可以设置其他界面)。在其中,有一个名为getClassX()
的公共方法。然后让您的Activity实现Callbacks
接口。
在您的片段中,在onAttach
中,存储对Callbacks
对象的引用(即您的活动,例如:
if(activity instanceof Callbacks)
mCallbacks = (Callbacks)activity;
这将保证Fragments能够调用该函数。 (如果您希望稍后在另一个应用程序中重用这些片段)
然后在您的活动中,在onCreate()
中,创建ClassX
的实例。在getClassX()
方法中,只需返回对它的引用。
当您想要从片段中引用它时,请调用mCallbacks.getClassX()
并对您进行排序。
答案 4 :(得分:0)
您可以在活动中使用静态对象,并从片段中使用它,或者调用片段中的getActivity()方法来访问整个活动对象/方法