2010-07-15 4 views
1

미리 정의 된 여러 범주를 기반으로 헤더를 사용하여 ListView를 만들려고합니다.헤더가있는 목록보기. 데이터베이스 데이터 충돌을 사용하는 SeparatedListAdapter

나는 Jeff Sharkey's separating lists with headers을 기본으로 사용하고 있습니다. SimpleAdapter를 제외하고 클래스와 XML은 동일합니다. 차이점은 내 데이터가 로컬 SQLite 데이터베이스에서 오는 것입니다. 보기 밖으로 전환하면 코드가 충돌합니다. 왜 이것이 될 수있는 아이디어? 아래 오류 및 코드.

07-15 14:58:44.950: ERROR/AndroidRuntime(582): Uncaught handler: thread main exiting due to uncaught exception 
07-15 14:58:44.970: ERROR/AndroidRuntime(582): java.lang.NullPointerException 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at android.widget.SimpleCursorAdapter.bindView(SimpleCursorAdapter.java:149) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at android.widget.CursorAdapter.getView(CursorAdapter.java:186) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at com.XYZ.XYZ.SeparatedListAdapter.getView(SeparatedListAdapter.java:94) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at android.widget.AbsListView.obtainView(AbsListView.java:1256) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at android.widget.ListView.makeAndAddView(ListView.java:1668) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at android.widget.ListView.fillDown(ListView.java:637) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at android.widget.ListView.fillSpecific(ListView.java:1224) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at android.widget.ListView.layoutChildren(ListView.java:1499) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at android.widget.AbsListView.onLayout(AbsListView.java:1113) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at android.view.View.layout(View.java:6830) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at android.view.View.layout(View.java:6830) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at android.view.View.layout(View.java:6830) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at android.view.View.layout(View.java:6830) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:998) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at android.widget.LinearLayout.onLayout(LinearLayout.java:918) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at android.view.View.layout(View.java:6830) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at android.view.View.layout(View.java:6830) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at android.view.View.layout(View.java:6830) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at android.view.View.layout(View.java:6830) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at android.view.ViewRoot.performTraversals(ViewRoot.java:996) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1633) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at android.os.Looper.loop(Looper.java:123) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at android.app.ActivityThread.main(ActivityThread.java:4363) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at java.lang.reflect.Method.invoke(Method.java:521) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
07-15 14:58:44.970: ERROR/AndroidRuntime(582):  at dalvik.system.NativeStart.main(Native Method) 

Category.java - 스타키의 튜토리얼에서 SimpleAdapter 내 해당 : 나는 업데이트를 사용하여 작업 할 그것을 가지고

Line 94 
if(position < size) return adapter.getView(position - 1, convertView, parent); 

답변

0

을 : 충돌에서 디버거에 언급 된 코드의

package com.XYZ.ipantrylite; 

import java.util.HashMap; 
import java.util.Map; 

import android.app.Activity; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.ListView; 
import android.widget.SimpleCursorAdapter; 

public class Category extends Activity { 

    public final static String ITEM_TITLE = "title"; 
    public final static String ITEM_CAPTION = "caption"; 

    public SeparatedListAdapter adapter; 

    private static final String TAG = "Category"; 

    public Map<String,?> createItem(String title, String caption) { 
     Map<String,String> item = new HashMap<String,String>(); 
     item.put(ITEM_TITLE, title); 
     item.put(ITEM_CAPTION, caption); 
     return item; 
    } 

    @Override 
// protected void onCreate(Bundle savedInstanceState) { 
//  // TODO Auto-generated method stub 
//  super.onCreate(savedInstanceState); 

    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 

     // create our list and custom adapter 
     adapter = new SeparatedListAdapter(this); 
     fillData(); 

     ListView list = new ListView(this); 
     list.setTextFilterEnabled(false); 
     list.setAdapter(adapter); 
     this.setContentView(list); 
    } 

    private void fillData() 
    { 
     String[] types = new String[] { 
       "Baby Food", 
       "Baking Supplies", 
       "Beverages", 
       "Dairy Products & Eggs", 
       "Fresh Produce, Fruits & Vegetables", 
       "Canned, Dried, Frozen Goods", 
       "Grains, Cereals, Breads, Pasta", 
       "Herbs & Spices", 
       "Misc Canned Goods", 
       "Oils & Fats", 
       "Prepackaged Foods", 
       "Protein, Meat, Fish", 
       "Snacks & Sweets", 
       "Soups, Sauces, & Gravies", 
       "Toiletries"}; 

     for(int i = 0; i < types.length - 1; i++) 
     {   
      Cursor c = managedQuery(PantryItemsProviderLite.CONTENT_URI, null, "TYPE = '"+types[i]+"'", null, "name desc"); 

      startManagingCursor(c); 

      if (c.moveToFirst()) { 
       c.setNotificationUri(getContentResolver(), PantryItemsProviderLite.CONTENT_URI); 
       String[] from = new String[] { PantryItemsProviderLite.NAME}; 
       int[] to = new int[] { R.id.textName}; 

       SimpleCursorAdapter items = new SimpleCursorAdapter(this, R.layout.items_row_cat, c, from, to); 
       adapter.addSection(types[i], items); 
      } 

      adapter.notifyDataSetChanged(); 
     } 
    } 

    @Override 
    protected void onPause(){ 
     super.onPause(); 
     clearData(); 
     Log.d("","on Pause called"); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     fillData(); 
     Log.d("","on Resume called"); 
    } 

    public void clearData(){ 
     adapter.headers.clear(); 
     adapter.sections.clear(); 
    } 
} 

라인 SeeratedListAdapter 코드가 http://code.google.com/p/foursquared/source/browse/main/src/com/joelapenna/foursquared/widget/SeparatedListAdapter.java 인 경우 입니다. adapter.clear()을 사용하고 onResume 리필을 사용합니다. fillData 루프의 데이터 변경을 알립니다. 일.

관련 문제