2014-08-31 48 views
0

我是新来的android和片段,所以我的问题是关于在应用程序数据库中存储值的适当方法。什么是存储片段值的合适方法?

从活动调用片段并传递数据库处理程序?

ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment); 
fragment.<specific_function_name>(dbhandler); 

或从片段调用活动方法?

import mainActivity; 
... 
mainActivity currentActivity=(mainActivity)getActivity(); 
currentActivity.storeValures(val,val2...) 

或只设置一个数据库处理程序上的每一个片段?...

或者,也许有更好的设计来面对呢?

在此先感谢您的答案。

+0

我会说,如果数据库调用是相似的,即为了避免冗余代码,从片段调用活动方法。或者更好的是,有一个单独的类处理数据库调用,并将对该类的引用传递给片段,以使数据库活动与活动和片段完全分离。 – cYrixmorten 2014-08-31 20:42:45

回答

1

由于数据库管理器将是普遍的整个应用程序,你可以创建一个类的DataHandler,将有单DataHandler实例

public class MyDatabaseHandler extends SQLiteOpenHelper{ 
    private static MyDatabaseHandler databaseHandlerInstance; 

    public static synchronized MyDatabaseHandler getInstance(Context context) { 
     if(databaseHandlerInstance == null) 
     databaseHandlerInstance = new MyDatabaseHandler(Context context); 

     return databaseHandlerInstance; 
    } 

    public MyDatabaseHandler(Context context){ 
     // Call to super class 
     // 
    } 

    // ..... onCreate calls 
} 

这样你就可以在你的应用程式,例如MyDatabaseHandler.getInstance使用dbhandler从任何地方(上下文)

我使用这种方法...

+0

我想我会用这个,但是我应该怎么做,如果我需要传递一个上下文到我的databaseHandler构造函数/ getInstance?比如公共数据库连接(上下文上下文)super(context,databaseName,null,DATABASE_VERSION);} – Motheus 2014-09-01 00:13:32

+0

假设你有不同表的dbHandler,你可以在构造函数DatabaseHandler中定义和初始化它们中的每一个并使用它们,你可以传递上下文和其他需要的参数作为构造函数的参数 – maaz 2014-09-01 00:16:28

+0

我觉得我有点困惑,因为即时通讯新的android。所以,我可以使用新的databaseConnection(this)从我的活动中的处理程序,因为活动包含上下文。但是,从片段这是不可能的,或者我不得不做新的数据库连接(getActivity());。这个可以吗?。如果没有初始化,我无法从片段中获得可用的处理程序,并且不会在没有上下文的情况下进行初始化。谢谢 – Motheus 2014-09-01 00:29:46

相关问题