Un problème spécifique est l'échec de l'appel de la méthode getView de mon arrayadapter personnalisé. J'utilise un fragment pour afficher une liste. L'activité qui engendre la liste permet à une personne d'être sélectionnée à partir d'un spinner. Je récupère ensuite les données d'une base de données en utilisant l'identifiant de la personne sélectionnée. Je conditionne ces données dans un objet support personnalisé affecté à une ArrayList. Voici le code d'activité qui crée une transaction de fragment.Android ListView et Fragment
FragmentTransaction fragmentTransaction =
getSupportFragmentManager().beginTransaction();
NotesListViewFragment notesListViewFragment = new NotesListViewFragment();
Bundle bundle = new Bundle();
bundle.putParcelableArrayList(Constants.NOTES_LIST, (ArrayList) rowValues);
notesListViewFragment.setArguments(bundle);
fragmentTransaction.add(notesListViewFragment, "FRAG");
fragmentTransaction.commit();
Le fragment obtient correctement les données groupées. La méthode onCreate s'exécute correctement, tout comme la méthode onCreateView. Voici le code onCreateView:
View view = inflater.inflate(R.layout.note_list_fragment_layout, null);
ListView notesListView = (ListView)
view.findViewById(android.R.id.list);
//ListView notesListView = (ListView) view.findViewById(android:list);
notesListView.addHeaderView(inflater.inflate(R.layout.notes_list_headings,
container, false));
View footer = ((LayoutInflater) context.getSystemService
(Context.LAYOUT_INFLATER_SERVICE))
.inflate(R.layout.notes_list_footer, null);
TextView v = (TextView) footer.findViewById(R.id.total_notes);
v.setText(Integer.toString(notesList.size()));
v.setTypeface(font);
footer.setPadding(30, 25, 0, 0);
notesListView.addFooterView(footer);
CustomNotesListAdapter adapter = new CustomNotesListAdapter(context,
R.layout.notes_list_row_layout, notesList);
//R.layout.notes_list_row_layout, notesList, false);
adapter.notifyDataSetChanged();
notesListView.setAdapter(adapter);
//setListAdapter(adapter);
return view;
Après l'adaptateur est créé, il contient les données dans le « notesList ». Le constructeur de l'adaptateur et la méthode getCount sont appelés, ce qui renvoie le nombre correct de lignes. La méthode getView n'est jamais appelée et rien n'est affiché sur l'appareil. Voici la méthode getView.
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
NoteListHolder noteListHolder = getItem(position);
if (convertView == null) {
//LayoutInflater inflater = (LayoutInflater) context
//.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = ((LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE))
.inflate(layoutResourceId, null);
viewHolder = new ViewHolder();
viewHolder.imageView = (ImageView)
convertView.findViewById(R.id.note_image);
viewHolder.noteText = (TextView)
convertView.findViewById(R.id.note_text);
viewHolder.updatedDate = (TextView)
convertView.findViewById(R.id.updated_date);
viewHolder.updatedBy = (TextView)
convertView.findViewById(R.id.updated_date);
viewHolder.noteSource = (TextView)
convertView.findViewById(R.id.note_source);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.noteText.setText(noteListHolder.getNote());
viewHolder.noteSource.setText(noteListHolder.getNoteSource());
viewHolder.updatedDate.setText(noteListHolder.getLastUpdated());
viewHolder.updatedBy.setText(noteListHolder.getLastUpdatedBy());
return convertView;
Voici la mise en page xml ListView:
<ListView
android:id="@+id/android:list"
style="@style/MyMaterialTheme.Base"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:divider="@android:color/black"
android:dividerHeight="5dp"
android:drawSelectorOnTop="true" >
J'ai cinq ou six scénarios similaires dans l'application, tout fonctionne correctement. La seule différence est l'utilisation d'un fragment pour contenir la liste.
Espérons que quelqu'un aura la patience de lire ceci et merci pour toute idée.
ce qui se passe si vous supprimez le 'if (convertView == null)' vérifier? – Rafa