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)
Supprimer le et écrire getActivity() dans contactList.setAdapter (nouveau contactListAdapter (ce, liste)) declration comme celui-ci contactList.setAdapter (nouveau contactListAdapter (getActivity(), liste)); –