-1

J'essaie d'afficher un fragment de dialogue avec une liste de tous les contacts qui s'y trouvent.Déploiement de mise en page sur un fragment de dialogue personnalisé Retourne une exception de pointeur nul

J'ai fait cet adaptateur:

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; 
    } 
} 

Je l'ai fait ce 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(); 
    } 
} 

J'ai appelé la boîte de dialogue comme celui-ci:

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"); 
      } 
     }); 

Mais je toujours avez cette erreur:

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) 

Comment puis-je résoudre ce problème? Y at-il un problème de cycle d'exécution (tente de gonfler un élément inexisting)

EDIT

Essayer façon Malik, j'ai modifié mon adaptateur pour ajouter le contexte, et je suis 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) 

J'essaye aussi ceci: contactList.setAdapter(new contactListAdapter(getActivity(), liste)); Et ça ne marchera pas! Juste modifier mon constructeur d'adaptateur à public contactListAdapter(Context context, List<Contact> liste)

+1

Supprimer le et écrire getActivity() dans contactList.setAdapter (nouveau contactListAdapter (ce, liste)) declration comme celui-ci contactList.setAdapter (nouveau contactListAdapter (getActivity(), liste)); –

Répondre

0

Essayez de gonfler le vi View dans getView de votre adaptateur comme ceci.

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

Voulez-vous essayer, mais qu'est-ce que "c"? –

+0

Désolé. Juste copié de et ancien morceau de code. C'est un contexte. –

+0

c est un contexte, probablement, donc je l'ajoute dans la déclaration privée, xill essayez –