2012-06-15 4 views
1

Fragment, SQLite 쿼리 문을 확장하는 클래스 내 작성은 가능합니까? 내가 직면하고SQLite 쿼리 문을 사용하는 확장 단편 및 목록 단편 클래스

@

문제 SQLiteOpenHelper이 매개 변수 만 Fragment에있는 그것의 불가능 제공하는 컨텍스트와 같은 컨텍스트를 필요로한다는 것이다.

다른 레이아웃에서도 그대로 Fragment elements from the Activity에 액세스 할 수 없으며 페이저보기를 사용할 수 있습니까?

public class ListFrag extends Fragment implements OnClickListener{ 
    private SQLiteDatabase database; 
    private MySQLiteHelper dbHelper=new MySQLiteHelper(this.getActivity().getApplicationContext()); 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Log.w("aaaaaaa","List on Create"); 
     database = dbHelper.getWritableDatabase(); 

    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     Log.w("b","List on Activity Created"); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view=inflater.inflate(R.layout.home, container,false); 

     TableRow leave =(TableRow)view.findViewById(R.id.leave); 
     leave.setOnClickListener(this); 
     Log.w("ccccccccc","List on Create View"); 
     TableRow time =(TableRow)view.findViewById(R.id.time); 
     time.setOnClickListener(this); 

     TableRow cart =(TableRow)view.findViewById(R.id.cart); 
     cart.setOnClickListener(this); 

     TableRow invoice =(TableRow)view.findViewById(R.id.invoice); 
     invoice.setOnClickListener(this); 

     TableRow purchase =(TableRow)view.findViewById(R.id.purchase); 
     purchase.setOnClickListener(this); 

     TableRow travel =(TableRow)view.findViewById(R.id.travel); 
     travel.setOnClickListener(this); 



     TextView leave_n =(TextView)view.findViewById(R.id.leave_n); 
     Cursor LCount= database.rawQuery("select count(*) from LeaveRequest",null); 
     LCount.moveToFirst(); 
     int lcount= LCount.getInt(0); 
     LCount.close(); 
     leave_n.setText(""+lcount); 


     return view; 
    } 

    public void onClick(View v) { 
     // TODO Auto-generated method stub 


      FragmentManager fragmentManager = getFragmentManager(); 
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

     switch (v.getId()) { 
      case R.id.leave: 
       ArrayListFragment list=new ArrayListFragment(); 
       fragmentTransaction.replace(R.id.frag_capt, list); 
       fragmentTransaction.commit(); 
      break; 

     case R.id.time: 
      Toast.makeText(this.getActivity().getApplicationContext(), "Toast message", 
        Toast.LENGTH_LONG).show(); 
      break; 

     case R.id.cart: 
      Toast.makeText(this.getActivity().getApplicationContext(), "Toast message", 
        Toast.LENGTH_LONG).show(); 
     break; 

     case R.id.invoice: 
      Toast.makeText(this.getActivity().getApplicationContext(), "Toast message", 
        Toast.LENGTH_LONG).show(); 
     break; 

     case R.id.purchase: 
      Toast.makeText(this.getActivity().getApplicationContext(), "Toast message", 
        Toast.LENGTH_LONG).show(); 
      break; 

     case R.id.travel: 
      Toast.makeText(this.getActivity().getApplicationContext(), "Toast message", 
        Toast.LENGTH_LONG).show(); 
      break; 


     } 

    } 
+1

조각에서 컨텍스트를 제공 할 수 있습니다 ... 당신은 조각이 포함 된 활동의 맥락을 제공 : 데이터베이스에 아무것도하기 전에 일반적으로 이런 일이 있어야합니다. – Barak

+0

아래 답변 중 하나가 문제를 해결하면 받아 들여야합니다 (해당 답변 옆의 체크 표시를 클릭하십시오). 그것은 두 가지 일을합니다. 모든 사람에게 문제가 해결되었음을 알리고 도움을 제공하는 사람에게 도움을줍니다. 전체 설명을 보려면 [here] (http://meta.stackexchange.com/a/5235/187716)를 참조하십시오. – Barak

+0

SQLiteDBHelper가 null ptr 예외를 제공합니다. bcos에서 컨텍스트를 다시 분석 할 수 없습니다. 해결책이 되라. –

답변

1

나는 항상 그것을 ... getActivity()를 사용합니다.

내 ListFragments 중 하나에서 코드 : 당신이 당신의 데이터베이스를 열거 한 후 폐쇄 된 데이터베이스에서 커서를 얻으려고 않기 때문에

itemCursor = mDbHelper.fetchAllItems(); 
getActivity().startManagingCursor(itemCursor); 
String[] from = new String[] { GroceryDB.ITEM_NAME, 
     GroceryDB.ITEM_UNIT, GroceryDB.ITEM_COST }; 
int[] to = new int[] { R.id.ListItem1, R.id.ListItem2, R.id.ListItem4 }; 
lists = new CursorAdapter_Check(getActivity(), 
     R.layout.rowlayout_itemlist, itemCursor, from, to); 
setListAdapter(lists); 

편집

당신은 오류를 얻고있다.

mDbHelper = new yourDatabase(getActivity()); 
mDbHelper.open(); 
+0

와트는 itemCursor이며 스 니펫에 CursorAdapter_Check가 나열되어 있습니까? –

+0

'itemCursor'는 목록에 들어가기 위해 DB의 데이터를 보유하고있는 커서입니다. 'CursorAdapter_Check'는 내 사용자 정의/확장 된 SimpleCursorAdapter입니다. (커스터마이징은 일반 SimpleCursorAdapter가 될 수있는 질문과 관련이 없습니다.) 핵심은'getActivity()'를 사용하여 Fragment에서 필요로하는 것들에 컨텍스트를 제공한다는 것이다. – Barak