通过android中的片段访问Database类

时间:2014-03-24 21:09:08

标签: android database sqlite android-fragments fragment

我试图从我的" MainActivity.java中的片段访问SQLite数据库"但我的数据库功能在另一个文件" Database.java"所以在" onCreateView"中调用了database_fragment.xml。 " MainActivity"无法访问这些功能......我应该将所有这些数据库功能直接放入片段类中,以便它可以看到这些吗?

这是我的代码的重要部分:

(在MainActivity.java中)

/**
 * "fragment_database", shows the database list
 */
public static class subFragment extends Fragment {
    public static final String ARG_MENU_NUMBER = "menu_number"; // Which sub-menu

    public subFragment() {
        // Empty constructor required for fragment subclasses
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        int i = getArguments().getInt(ARG_MENU_NUMBER);
        View rootView;
        if(i==0){
            rootView = inflater.inflate(R.layout.fragment_database, container, false);
        }else{
            rootView = inflater.inflate(R.layout.fragment_help, container, false);  
        }

        return rootView;
    }


}

以下是XML无法达到的功能:

(IN Database.java)

    public void onClick_DisplayRecords(View v) {
    displayText("Clicked display record!");

    Cursor cursor = myDb.getAllRows();
    displayRecordSet(cursor);
}

错误消息:

  

java.lang.IllegalStateException:在活动类com.mtl.android.spca.MainActivity中找不到onClick_DisplayRecords(View)方法,用于视图类android.widget.Button上的onClick处理程序,其id为#39 ; btnDisplay'

1 个答案:

答案 0 :(得分:1)

数据库是Singleton的一个很好的例子。

private static SomeDatabase instance=null

private SomeDatabase(Context context) {
....
}

public static SomeDatabase getInstance(Context context) {
    if (instance==null) {
        instance=new SomeDatabase(context);
    }
    return instance
}

然后您可以随意使用它,只需致电SomeDatabase.getInstance(context);

然而,这不是你的问题。您的问题是您在XML中指定android:onClick,并尝试在片段中引用回调。回调仅转到活动。您需要在java代码中执行类似的操作,基本上手动指定OnClickListener

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    findViewById(R.id.button_id).setOnClickListener(new OnClickListener() {
        @Override
        public void onClick() {
             nClick_DisplayRecords()
        }
    }
    ...