-1

私はそこにあるすべての連絡先のリストを持つダイアログフラグメントを表示しようとしています。カスタムダイアログのフラグメント上のインフレータがヌルポインタ例外を返します

私はこのアダプタを作りました:

package fr.nf.smsplus.adapter; 

import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.TextView; 

import java.util.List; 

import fr.nf.smsplus.object.Contact; 
import fr.nf.smsplus.R; 
import fr.nf.smsplus.contactsDialogFragment; 

/** 
* Created by Nicolas on 22/05/2016. 
*/ 
public class contactListAdapter extends BaseAdapter { 

    private List<Contact> liste; 
    private static LayoutInflater inflater = null; 

    public contactListAdapter(contactsDialogFragment contactsDialogFragment, List<Contact> liste) { 
     this.liste = liste; 
     //inflater = (LayoutInflater) contactsDialogFragment.getSystemService(contactsDialogFragment.LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return liste.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return liste.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     Contact contact = liste.get(position); 
     View vi = convertView; 
     if (vi == null) 
      vi = inflater.inflate(R.layout.item_contact, null); 
     TextView text = (TextView) vi.findViewById(R.id.contact_name); 
     text.setText(contact.getDisplayName()); 
     return vi; 
    } 
} 

私はこのdialogfragmentを作りました:

package fr.nf.smsplus; 

import android.app.AlertDialog; 
import android.app.Dialog; 
import android.app.DialogFragment; 
import android.content.DialogInterface; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.widget.AbsListView; 

import java.util.List; 

import fr.nf.smsplus.adapter.contactListAdapter; 
import fr.nf.smsplus.object.Contact; 

/** 
* Created by Nicolas on 22/05/2016. 
*/ 
public class contactsDialogFragment extends DialogFragment{ 

    List<Contact> liste; 
    AbsListView contactList; 

    public static contactsDialogFragment newInstance(List<Contact> liste){ 
     contactsDialogFragment retour = new contactsDialogFragment(); 
     retour.liste = liste; 
     return retour; 
    } 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     // Use the Builder class for convenient dialog construction 

     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 

     LayoutInflater inflater = getActivity().getLayoutInflater(); 
     View contactListView = inflater.inflate(R.layout.dialog_contacts, null); 
     contactList = (AbsListView) contactListView.findViewById(R.id.listContacts); 
     contactList.setAdapter(new contactListAdapter(this, liste)); 

     builder.setView(contactListView) 
       .setNegativeButton(R.string.action_cancel, new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         // User cancelled the dialog 
        } 
       }) 
       .setTitle(R.string.cdf_title);; 



     // Create the AlertDialog object and return it 
     return builder.create(); 
    } 
} 

私はこのようなダイアログを呼び出し:

fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       contactList = new ArrayList<Contact>(); 
       listContacts(); 

       contactsDialogFragment pickContact = contactsDialogFragment.newInstance(contactList); 
       pickContact.show(getFragmentManager(), "contacts"); 
      } 
     }); 

しかし、私はいつも意志このエラーがあります:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.LayoutInflater.inflate(int, android.view.ViewGroup)' on a null object reference at fr.nf.smsplus.adapter.contactListAdapter.getView(contactListAdapter.java:52) 

この問題を解決するにはどうすればよいですか?

EDIT

マリクの方法を試す(inexisting要素を膨らましようとしている)の実行サイクルの問題があり、私はコンテキストを追加するために私のアダプタを変更した、と私はsameerrorました:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference at fr.nf.smsplus.adapter.contactListAdapter.getView(contactListAdapter.java:55) 

私はあまりにもこれを試しています:contactList.setAdapter(new contactListAdapter(getActivity(), liste));そしてそれは動作しません!アダプタのコンストラクタを変更するだけですpublic contactListAdapter(Context context, List<Contact> liste)

+1

これを削除し、(getActivityを書く)contactList.setAdapter中(新しいcontactListAdapter(これ、LISTE))このcontactList.setAdapterようdeclration(新しいcontactListAdapter(getActivity()、LISTE)); –

答えて

0

このようにアダプタのgetViewを膨張させてみてください。

if(vi==null){ 
    inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    vi=inflater.inflate(R.layout.item_contact,parent,false); 
} 
+0

試してみたいが、 "c"とは何ですか? –

+0

申し訳ありません。ちょうどコピーされた古いコードです。その文脈。 –

+0

cはコンテキストなので、プライベート宣言でそれを追加してみてください。 –

関連する問題