Android:从活动还是片段访问数据库?
我有一个带有三个独立片段的Android:从活动还是片段访问数据库?,android,sqlite,android-fragments,android-intent,Android,Sqlite,Android Fragments,Android Intent,我有一个带有三个独立片段的main活动。我需要访问每个片段中的SQLite数据库中的数据 数据对象MyObject包含基本类型以及其他对象的列表 因此,假设我们有三个片段,片段A,片段B和片段C FragmentB创建MyObject对象并将其保存到数据库中。保存后,FragmentC打开并填充MyObject数据 FragmentA列出所有MyObject对象,单击列表中的一个项目后,将打开FragmentC并填充所选的MyObject 什么是正确的实现 活动是否应该控制所有数据库访问并将My
main活动。我需要访问每个片段中的SQLite数据库中的数据
数据对象MyObject
包含基本类型以及其他对象的列表
因此,假设我们有三个片段,片段A
,片段B
和片段C
FragmentB
创建MyObject
对象并将其保存到数据库中。保存后,FragmentC
打开并填充MyObject
数据
FragmentA
列出所有MyObject
对象,单击列表中的一个项目后,将打开FragmentC
并填充所选的MyObject
什么是正确的实现
活动是否应该控制所有数据库访问并将MyObject
传递给相应的片段
每个片段是否应该每次访问数据库,以便自己访问数据
是否应FragmentA
和FragmentB
读入数据并将相应的MyObject
传递给FragmentC
对于从fragment->activity->fragment
或activity->fragment
传递数据的情况,哪种方法最适合:
可包裹的
意图
界面(通过活动)
由于MyObject
包含OtherObject
的列表,而且所有数据都不能很容易地分解和传输,因此使用parcelable似乎很困难
显示使用接口将数据从片段传输到活动,其中片段声明在活动中实现的接口
。要将对象从活动转移到片段,是否在活动中声明另一个接口,并在片段中实现它
我找不到任何直接的建议
感谢您的帮助如果我正确地解释了您的情况,我会使用接口
将MyObject
对象从片段B
传递到活动
,然后转到片段C
,或本地广播管理器
或事件总线
。然而,在开始之前,我应该指出我是从内存输入的,所以我不能给出LocalBroadcastManager
或GreenRobot的示例,但这两个选项都是可行的选择
public class FragmentB {
FragCallbacks mCallbacks;
public interface FragCallbacks {
void objectSavedToDatabase(MyObject object);
}
@Override
public void onAttach (Activity activity) {
if (activity instanceof FragCallbacks) {
mCallbacks = (FragCallbacks) activity;
}
// Logic for writing to your database, and then, on completion...
mCallbacks.objectSavedToDatabase(objectJustWrittenToDatabase);
然后,在你的活动中
public class MainActivity implements FragmentB.FragCallbacks {
FragmentC fragmentC;
@Override
public void objectSavedToDatabase(MyObject object) {
fragmentC = FragmentC.newInstance(params);
//If MyObject is Parcelable, you can pass it as a parameter here.
//This is probably the preferable option. Otherwise, you can use a
// "setMyObject()" method.
getFragmentManager()
.beginTransaction()
.replace(...)
.commit();
fragmentC.setMyObject(object);
如果我正确地解释了您的情况,我会使用接口
将MyObject
对象从片段B
传递到活动
,然后再传递到片段C
,或本地广播管理器
或事件总线
。然而,在开始之前,我应该指出我是从内存输入的,所以我不能给出LocalBroadcastManager
或GreenRobot的示例,但这两个选项都是可行的选择
public class FragmentB {
FragCallbacks mCallbacks;
public interface FragCallbacks {
void objectSavedToDatabase(MyObject object);
}
@Override
public void onAttach (Activity activity) {
if (activity instanceof FragCallbacks) {
mCallbacks = (FragCallbacks) activity;
}
// Logic for writing to your database, and then, on completion...
mCallbacks.objectSavedToDatabase(objectJustWrittenToDatabase);
然后,在你的活动中
public class MainActivity implements FragmentB.FragCallbacks {
FragmentC fragmentC;
@Override
public void objectSavedToDatabase(MyObject object) {
fragmentC = FragmentC.newInstance(params);
//If MyObject is Parcelable, you can pass it as a parameter here.
//This is probably the preferable option. Otherwise, you can use a
// "setMyObject()" method.
getFragmentManager()
.beginTransaction()
.replace(...)
.commit();
fragmentC.setMyObject(object);
如果我正确地解释了您的情况,我会使用接口
将MyObject
对象从片段B
传递到活动
,然后再传递到片段C
,或本地广播管理器
或事件总线
。然而,在开始之前,我应该指出我是从内存输入的,所以我不能给出LocalBroadcastManager
或GreenRobot的示例,但这两个选项都是可行的选择
public class FragmentB {
FragCallbacks mCallbacks;
public interface FragCallbacks {
void objectSavedToDatabase(MyObject object);
}
@Override
public void onAttach (Activity activity) {
if (activity instanceof FragCallbacks) {
mCallbacks = (FragCallbacks) activity;
}
// Logic for writing to your database, and then, on completion...
mCallbacks.objectSavedToDatabase(objectJustWrittenToDatabase);
然后,在你的活动中
public class MainActivity implements FragmentB.FragCallbacks {
FragmentC fragmentC;
@Override
public void objectSavedToDatabase(MyObject object) {
fragmentC = FragmentC.newInstance(params);
//If MyObject is Parcelable, you can pass it as a parameter here.
//This is probably the preferable option. Otherwise, you can use a
// "setMyObject()" method.
getFragmentManager()
.beginTransaction()
.replace(...)
.commit();
fragmentC.setMyObject(object);
如果我正确地解释了您的情况,我会使用接口
将MyObject
对象从片段B
传递到活动
,然后再传递到片段C
,或本地广播管理器
或事件总线
。然而,在开始之前,我应该指出我是从内存输入的,所以我不能给出LocalBroadcastManager
或GreenRobot的示例,但这两个选项都是可行的选择
public class FragmentB {
FragCallbacks mCallbacks;
public interface FragCallbacks {
void objectSavedToDatabase(MyObject object);
}
@Override
public void onAttach (Activity activity) {
if (activity instanceof FragCallbacks) {
mCallbacks = (FragCallbacks) activity;
}
// Logic for writing to your database, and then, on completion...
mCallbacks.objectSavedToDatabase(objectJustWrittenToDatabase);
然后,在你的活动中
public class MainActivity implements FragmentB.FragCallbacks {
FragmentC fragmentC;
@Override
public void objectSavedToDatabase(MyObject object) {
fragmentC = FragmentC.newInstance(params);
//If MyObject is Parcelable, you can pass it as a parameter here.
//This is probably the preferable option. Otherwise, you can use a
// "setMyObject()" method.
getFragmentManager()
.beginTransaction()
.replace(...)
.commit();
fragmentC.setMyObject(object);
一,。实施
内容提供商管理对中央数据存储库的访问。提供者是Android应用程序的一部分,Android应用程序通常提供自己的UI来处理数据
二,。使用
此类为应用程序提供对内容模型的访问
- 例如,直接查询光标:
- 或通过
回调
执行数据异步加载的类。当加载程序处于活动状态时,它们应该监视数据源,并在内容更改时提供新结果。有关详细信息,请参见LoaderManager
为什么?
- 将数据模型与应用程序逻辑分离——在小项目中,这是不可取的,但当您的项目发展起来时,您将看到付出的努力得到了回报
1。实施
内容提供商管理对中央数据存储库的访问。提供者是Android应用程序的一部分,Android应用程序通常提供自己的UI来处理数据
二,。使用
此类为应用程序提供对内容模型的访问
- 例如,直接查询光标:
- 或通过
回调
执行数据异步加载的类。当加载程序处于活动状态时,它们应该监视数据源,并在内容更改时提供新结果。有关详细信息,请参见LoaderManager