2012-01-24 16 views
15

Veritabanımdaki verileri bir ListFragment içinde görüntülemeye çalışıyorum. AncakListFragment'ın ListView kendi ListAdapter kullanıyorum NullPointerException atar

package com.mysys.asistan; 

import android.app.ListFragment; 
import android.content.Context; 
import android.database.DataSetObserver; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ListAdapter; 
import android.widget.TextView; 

import com.mysys.asistan.database.Company; 

public class CompanyListFragment extends ListFragment { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setListAdapter(new CompanyListAdapter(getActivity())); 
    } 

    private class CompanyListAdapter implements ListAdapter { 

     private final Context context; 
     private DatabaseHelper dbHelper; 

     public CompanyListAdapter(Context context) { 
      this.context = context; 
      this.dbHelper = new DatabaseHelper(context); 
     } 

     public int getCount() { 
      return dbHelper.getCompanyCount(); 
     } 

     public Object getItem(int position) { 
      return dbHelper.getAllCompanies().get(position); 
     } 

     public long getItemId(int position) { 
      return (long) dbHelper.getAllCompanies().get(position).id; 
     } 

     public View getView(int position, View view, ViewGroup parent) { 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      View row = inflater.inflate(R.layout.company_list_item, parent, false); 
      Company company = (Company) getItem(position); 

      TextView nameView = (TextView) row.findViewById(R.id.CompanyListName); 
      TextView telephoneView = (TextView) row.findViewById(R.id.CompanyListTelephone); 
      TextView addressView = (TextView) row.findViewById(R.id.CompanyListAddress); 

      nameView.setText(company.name); 
      telephoneView.setText(company.telephone); 
      addressView.setText(company.address); 

      return null; 
     } 

     public int getItemViewType(int position) { 
      return IGNORE_ITEM_VIEW_TYPE; 
     } 

     public int getViewTypeCount() { 
      return 1; 
     } 

     public boolean hasStableIds() { 
      return true; 
     } 

     public boolean isEmpty() { 
      return getCount() == 0 ? true : false; 
     } 

     public void registerDataSetObserver(DataSetObserver observer) { 
      // TODO Auto-generated method stub 

     } 

     public void unregisterDataSetObserver(DataSetObserver observer) { 
      // TODO Auto-generated method stub 

     } 

     public boolean areAllItemsEnabled() { 
      return true; 
     } 

     public boolean isEnabled(int position) { 
      return true; 
     } 

    } 
} 

: Ben ListActivity kullandığınızda Bunu yapmak için, ben de aynı şekilde takip ettim, benim kendi adaptörü (adaptör benim eski projelerin birinde BaseAdapter genişleten bir sınıf çevirdim, tuhaf görünebilir) oluşturuldu Bu bir NullPointerException yol açar ve ben logCat içinde günlüklerinden bir şey çözemedim, hiçbir şey benim koduna ilişkin:

01-24 20:24:06.040: E/AndroidRuntime(8731): FATAL EXCEPTION: main 
01-24 20:24:06.040: E/AndroidRuntime(8731): java.lang.NullPointerException 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at android.widget.ListView.measureScrapChild(ListView.java:1181) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at android.widget.ListView.measureHeightOfChildren(ListView.java:1264) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at android.widget.ListView.onMeasure(ListView.java:1173) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at android.view.View.measure(View.java:10848) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4353) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:267) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at android.view.View.measure(View.java:10848) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4353) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:267) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at android.view.View.measure(View.java:10848) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4353) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1284) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:956) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:521) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at android.view.View.measure(View.java:10848) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4353) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:267) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at android.view.View.measure(View.java:10848) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:764) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:519) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at android.view.View.measure(View.java:10848) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4353) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:267) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2042) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at android.view.View.measure(View.java:10848) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at android.view.ViewRoot.performTraversals(ViewRoot.java:941) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at android.view.ViewRoot.handleMessage(ViewRoot.java:2063) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at android.os.Handler.dispatchMessage(Handler.java:99) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at android.os.Looper.loop(Looper.java:132) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at android.app.ActivityThread.main(ActivityThread.java:4126) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at java.lang.reflect.Method.invoke(Method.java:491) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) 
01-24 20:24:06.040: E/AndroidRuntime(8731):  at dalvik.system.NativeStart.main(Native Method) 

ve bu parçasını içerir düzenidir:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" > 

    <fragment 
     android:id="@+id/fragment1" 
     android:name="com.mysys.asistan.CompanyListFragment" 
     android:layout_width="@dimen/company_listfragment_width" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 

Ve bu company_list_item.xml geçerli:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <TextView android:id="@+id/CompanyListName" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <TextView android:id="@+id/CompanyListAddress" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <TextView android:id="@+id/CompanyListTelephone" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 

Ben this soru bulundu, ancak çözüm bence benim sorunla ilgili bir şey değildir. Yardımlarınız için şimdiden teşekkür ederiz.

cevap

34

Görünümü getview() işlevinden döndürmelisiniz. "Boş" döndünüz.

 public View getView(int position, View view, ViewGroup parent) { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View row = inflater.inflate(R.layout.company_list_item, parent, false); 
     Company company = (Company) getItem(position); 

     TextView nameView = (TextView) row.findViewById(R.id.CompanyListName); 
     TextView telephoneView = (TextView) row.findViewById(R.id.CompanyListTelephone); 
     TextView addressView = (TextView) row.findViewById(R.id.CompanyListAddress); 

     nameView.setText(company.name); 
     telephoneView.setText(company.telephone); 
     addressView.setText(company.address); 

     return row;//changed from null 
    } 

Not: Liste görünümünde kaydırma yapmak için geri dönüştürülmüş görünümü ve Tutucuları kullanın. Daha iyi bir anlayış için bu tutorial'u okuyun.

+0

Ah, benim kötüyüm, kod eski projelerimden bir kopyala yapıştır olduğu için onu özlemişimdir. Bu soru mu kalmalı yoksa silmem gerekir mi? Geri dönüştürülmüş görünüm ve sahiplere ilişkin ipucu için teşekkürler. – Utku

+0

Evet. Bu soruyu sil. Bu gönderi şimdi herhangi bir amaç için sunucu değil. :) – manjusg

+7

Lütfen kalmasına izin verin, ilk "measureScrapChild nullpointerexception" dır ve yanlış bir geri dönüş çocuğuna bağlı olduğunu gösterir. –

İlgili konular