2014-03-24 34 views
1

我試圖從我的「MainActivity.java」中的片段訪問SQLite數據庫,但我的數據庫函數在另一個文件「Database.java」中,因此調用的database_fragment.xml 「MainActivity」的「onCreateView」不能訪問這些函數......我應該直接將所有這些數據庫函數直接放入片段類中,以便它可以看到這些函數嗎?通過android中的一個片段訪問數據庫類

這裏是我的代碼的重要組成部分:

(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 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處理程序的方法onClick_DisplayRecords(視圖)和視圖類android.widget.Button ID爲「btnDisplay」

回答

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中指定了一個,並試圖在Fragment中引用回調。回調僅限於活動。你需要在你的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() 
     } 
    } 
    ... 
+0

我應該在MainActivity的onCreateView中添加這一行嗎?因爲它是假設返回一個視圖...即使它不是來自調用類,xml將能夠看到它嗎? Thx – Jaythaking

+0

不知道你的程序應該做什麼,我無法回答這個問題。但總的來說,如果它與片段有關,它應該停留在片段中,否則將它放入活動中是可以的。 – PearsonArtPhoto

+0

這是一個非常簡單的應用程序,它假設在正確選擇的片段中顯示數據庫...但是,所有與數據庫相關的函數都在外部Database.java中,如果必須重定向所有這些函數從MainActivity.java到Databse.java,因爲xml只能訪問活動... – Jaythaking