2016-04-12 23 views
0

Listemi doldurmaya çalışıyorum Özel oluşturduğum bir dizi bağdaştırıcısıyla oluşturdum. İstediğim sonuç, sol tarafta bir görüntü ve sağdaki iki etiketin olması.Android dolgu listesiGörüntüle ArrayAdapter ile

ListView'i görüntülemesi gereken bölüme ulaştığımda, uygulama çöküyor ancak nedenini gerçekten bulamıyorum. Hata, java.lang.IllegalStateException: System services not available to Activities before onCreate(). İşte

benim kodudur:

parçası:

public class inboxCellElement { 
    private String name = "", message = ""; 
    private int imgId = 0; 

    public inboxCellElement(int imgId, String name, String message){ 
     this.imgId = imgId; 
     this.name = name; 
     this.message = message; 
    } 

    public int getImgId() { return imgId; } 
    public String getName() { return name; } 
    public String getMessage() { return message; } 
} 

özel Adaptörü:

public class inboxCellAdapter extends ArrayAdapter { 
    inboxCellElement[] elts; 
    NavDrawer navDrawer; 

    // constructor 
    public inboxCellAdapter(Context context, int resource, Object[] objects, NavDrawer navDrawer) { 
     super(context, resource, objects); 
     elts = (inboxCellElement[]) objects; 
     this.navDrawer = navDrawer; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     MyHolder holder = null; 
     LayoutInflater inflater = new NavDrawer().getLayoutInflater(); 
     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.inbox_cell_layout, null, false); 
      holder = new MyHolder(convertView); 
      convertView.setTag(holder); 
     } 
     else { 
      holder = (MyHolder) convertView.getTag(); 
     } 
     holder.getUpperText().setText(elts[position].getName()); 
     holder.getLowerText().setText(elts[position].getMessage()); 
     holder.getImage().setImageResource(elts[position].getImgId()); 

     return convertView; 
    } 

    private class MyHolder { 
     private View row; 
     private TextView upperText = null, lowerText = null; 
     private ImageView img = null; 

     public MyHolder(View row) { 
      this.row = row; 
     } 

     public TextView getUpperText() { 
      if (this.upperText == null) { 
       this.upperText = (TextView) navDrawer.findViewById(R.id.inboxCellName); 
      } 
      return this.upperText; 
     } 

     public TextView getLowerText() { 
      if (this.lowerText == null) { 
       this.lowerText = (TextView) navDrawer.findViewById(R.id.inboxCellMessage); 
      } 
      return this.lowerText; 
     } 

     public ImageView getImage() { 
      if (this.img == null) { 
       this.img = (ImageView) navDrawer.findViewById(R.id.inboxCellImg); 
      } 
      return this.img; 
     } 
    } 
} 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    getActivity().setTitle("Inbox"); 

    myView = inflater.inflate(R.layout.inbox_layout, container, false); 

    ListView list = (ListView) myView.findViewById(R.id.listViewMyAccount); 
    inboxCellElement[] elts = new inboxCellElement[] {new inboxCellElement(R.drawable.ic_menu_camera, "Val", "Hi !")}; 
    list.setAdapter(new inboxCellAdapter(new NavDrawer(), R.layout.inbox_cell_layout, elts, (NavDrawer) getActivity())); 

    return myView; 
} 

verileri içeren nesne ListView geçmek

Görünüşe göre Hata, birkaç navDrawer.findViewById(...) çağrıdan gelir, ancak nasıl düzeltileceğini bilmiyorum. Herkes bu hatanın gerçekleştiğini onaylayabilir mi, neden ve düzeltmeme yardım etsin? Teşekkür

DÜZENLEME: stacktrace ekleme

--------- kazasında başlangıcı

Eğer yorumların NavDrawer dediği gibi Sen ( context sağlamak için etkinlik'ın yapıcı kullanamaz
04-12 14:32:58.816 2128-2128/t2g.com.travel2gather E/AndroidRuntime: FATAL EXCEPTION: main 
                    Process: t2g.com.travel2gather, PID: 2128 
                    java.lang.IllegalStateException: System services not available to Activities before onCreate() 
                     at android.app.Activity.getSystemService(Activity.java:5253) 
                     at android.view.LayoutInflater.from(LayoutInflater.java:229) 
                     at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:178) 
                     at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:137) 
                     at t2g.com.travel2gather.adapters.inboxCellAdapter.<init>(inboxCellAdapter.java:0) 
                     at t2g.com.travel2gather.inboxFragment.onCreateView(inboxFragment.java:30) 
                     at android.app.Fragment.performCreateView(Fragment.java:2220) 
                     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:973) 
                     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1148) 
                     at android.app.BackStackRecord.run(BackStackRecord.java:793) 
                     at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1535) 
                     at android.app.FragmentManagerImpl$1.run(FragmentManager.java:482) 
                     at android.os.Handler.handleCallback(Handler.java:739) 
                     at android.os.Handler.dispatchMessage(Handler.java:95) 
                     at android.os.Looper.loop(Looper.java:148) 
                     at android.app.ActivityThread.main(ActivityThread.java:5417) 
                     at java.lang.reflect.Method.invoke(Native Method) 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
+0

tam yığın izleme gönderebilir? –

+0

Gönderenin sonuna ekledim – Dliix

+0

Herhangi bir yerden getSystemService (Context.CONNECTIVITY_SERVICE); '? –

cevap

2

senin MainActivity). Bu şekilde bu onCreateView'u değiştirin. Aynı şekilde adaptöre

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    getActivity().setTitle("Inbox"); 

    myView = inflater.inflate(R.layout.inbox_layout, container, false); 

    ListView list = (ListView) myView.findViewById(R.id.listViewMyAccount); 
    inboxCellElement[] elts = new inboxCellElement[] {new inboxCellElement(R.drawable.ic_menu_camera, "Val", "Hi !")}; 
    list.setAdapter(new inboxCellAdapter(getActivity(), R.layout.inbox_cell_layout, elts, (NavDrawer) getActivity())); 

    return myView; 
} 

:

public class inboxCellAdapter extends ArrayAdapter { 
    inboxCellElement[] elts; 
    NavDrawer navDrawer; 
    Activity activity; 

    // constructor 
    public inboxCellAdapter(Activity activity, int resource, Object[] objects, NavDrawer navDrawer) { 
     super(context, resource, objects); 
     this.activity = activity; 
     elts = (inboxCellElement[]) objects; 
     this.navDrawer = navDrawer; 
    } 

gibi Dolayısıyla getView olacaktır:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    MyHolder holder = null; 
    LayoutInflater inflater = activity.getLayoutInflater(); 
+0

Yardımlarınız için teşekkürler. Bunun neden olduğunu anladığımı düşünüyorum. Ben süper (bağlam, kaynak, nesneler) 'yi arayarak bir hata yaptın; Bununla birlikte, ben 'activity' tarafından değiştirildi, ancak hala bir çöküş var: java.lang.NullPointerException: boş bir nesne üzerinde sanal yöntem' void android.widget.TextView.setText (java.lang.CharSequence) 'çağrılmaya teşebbüs t2g.com.travel2gather.adapters.inboxCellAdapter.getView (inboxCellAdapter.java:42) 'de numaralı başvuru. Holder.getUpperText() null null? – Dliix

+0

DÜZENLEME: Hatayı buldum: Tutucuda 'row.findViewById()' yerine activity.findViewById() kullanıyordum. Yardım için teşekkürler! – Dliix

+0

Harika! Mutlu kodlama. :) –

İlgili konular