【问题标题】:Access Database class through a fragment in android通过android中的片段访问数据库类
【发布时间】:2023-03-07 21:55:02
【问题描述】:

我正在尝试从“MainActivity.java”中的片段访问 SQLite 数据库,但我的数据库函数位于另一个文件“Database.java”中,因此在“MainActivity”的“onCreateView”中调用了 database_fragment.xml " 无法访问那些函数...我是否应该将所有这些数据库函数直接放入片段类中以便它可以看到那些?

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

(IN 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 数据库.java)

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

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

错误信息:

java.lang.IllegalStateException:在 id 为“btnDisplay”的视图类 android.widget.Button 上的 onClick 处理程序的活动类 com.mtl.android.spca.MainActivity 中找不到方法 onClick_DisplayRecords(View)

【问题讨论】:

    标签: android database sqlite android-fragments fragment


    【解决方案1】:

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

    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,并尝试在片段中引用回调。回调仅转到 Activity。你需要在你的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()
            }
        }
        ...
    

    【讨论】:

    • 那我是不是应该在MainActivity的onCreateView中加入这一行呢?因为它假设返回一个视图......即使它不是来自调用类,xml 也能看到它?谢谢
    • 不知道你的程序应该做什么,我无法回答这个问题。但是一般情况下,如果和fragment有关系,就应该留在fragment中,否则放到activity中就可以了。
    • 这是一个非常简单的应用程序,假设在正确选择的片段中显示数据库......但问题是,我所有与数据库相关的功能都在外部 Database.java 中,这很糟糕如果我必须将所有这些函数从 MainActivity.java 重定向到 Databse.java,因为 xml 只能访问活动......
    • 听起来你想把代码放在片段中。祝你好运!
    • 我会试试你说的,因为我是初学者...谢谢
    猜你喜欢
    • 2012-07-18
    • 1970-01-01
    • 2014-06-02
    • 2011-07-24
    • 1970-01-01
    • 2014-12-29
    • 2021-09-26
    • 1970-01-01
    • 2012-09-23
    相关资源
    最近更新 更多