我试图从我的" 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'
答案 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()
}
}
...