0

J'essaie de faire un listfragment pour afficher vingt éléments. En l'état, seul le dernier élément de la liste est affiché pour les vingt éléments de la liste. J'ai regardé des exemples de listfragments et je ne peux pas dire ce qui ne va pas.Android ListFragment affichant seulement le dernier élément répété

Ceci est de la classe CourseFragment qui s'étend ListFragment:

private List<Course> mCourses; 

public CourseFragment() { 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    mCourses = Schedule.get(getActivity()).getSchedule(); 
    CourseArrayAdapter<Course> mAdapter = new CourseArrayAdapter<>(getContext(), android.R.layout.simple_list_item_1, mCourses); 
    setListAdapter(mAdapter); 

    for (int i = 0; i < 20; i++) { 
     Log.d("DEBUGTAG", "Course: " + mCourses.get(i)); 
    } 

} 

Ceci est du CourseArrayAdapter:

public CourseArrayAdapter(Context context, int resource, List<T> objects) { 
    super(context, resource, objects); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    Log.d("DEBUG", "getView " + position); 
    LayoutInflater inflater = LayoutInflater.from(getContext()); 
    View mLayout; 
    if (convertView == null) { 
     mLayout = inflater.inflate(R.layout.view_course, parent, false); 
    } else { 
     mLayout = convertView; 
    } 
    T mCourse = getItem(position); 
    TextView mCourseTextView = (TextView) mLayout.findViewById(R.id.course_textview); 
    mCourseTextView.setText(mCourse.toString()); 

    return mLayout; 
} 

Et le onCreate du MainActivity:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    FragmentManager mFragManager = getFragmentManager(); 
    Fragment mFragment = mFragManager.findFragmentById(R.id.main_activity_framelayout); 
    if(mFragment == null) { 
     mFragment = new CourseFragment(); 
     mFragManager.beginTransaction().add(R.id.main_activity_framelayout, mFragment).commit(); 
    } 

} 

Voici les variables d'instance et le constructeur de la classe Course:

private static String sCourseName; 
private static int sCourseNum; 
private static String sInstructor; 
private static String sDescription; 

public Course(String mCourseName, int mCourseNum, String mInstructor, String mDescription) { 
    sCourseName = mCourseName; 
    sCourseNum = mCourseNum; 
    sInstructor = mInstructor; 
    sDescription = mDescription; 
} 

Si un autre code est nécessaire pour résoudre ce problème, veuillez me le faire savoir. Merci beaucoup pour toute aide!

+0

Pouvez-vous montrer constructeur de courseArrayAdapter –

+0

Avez-vous eu même valeur pour mCourse.tostring pouvez-vous s'il vous plaît me dire quel est-il l'impression –

+0

Mis à jour pour inclure cela – Roc47HS

Répondre

0

S'il vous plaît essayer maintenant mCourses aura des données .i pensent qu'il ne se reproduira pas

private List<Course> mCourses; 
public CourseArrayAdapter(Context context, int resource, List<T> objects) { 
super(context, resource, objects); 
mCourses=objects; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
Log.d("DEBUG", "getView " + position); 
LayoutInflater inflater = LayoutInflater.from(getContext()); 
View mLayout; 
if (convertView == null) { 
    mLayout = inflater.inflate(R.layout.view_course, parent, false); 
} else { 
    mLayout = convertView; 
} 
    // T mCourse = getItem(position); 
TextView mCourseTextView = (TextView) mLayout.findViewById(R.id.course_textview); 
mCourseTextView.setText(mCourses.get(position).toString()); 

return mLayout; 
} 
+0

je devais changer la première ligne de code à: 'Liste privée mCourses,' Il est encore en train de faire ce qu'il a fait avant – Roc47HS

+0

Log.d ("DEBUGTAG", "Cours:" + mCourses.get (i)) obtenez-vous une valeur différente à chaque fois ici? –

+0

Non, je reçois la même valeur répétée là aussi. C'est la valeur de la méthode toString du dernier élément. – Roc47HS