0

我試圖做一個listfragment來顯示二十個項目。就目前而言,只有列表中的最後一項顯示在列表中的所有二十個項目中。我一直在尋找listfragments的例子,我不知道什麼是錯的。僅顯示最後一個項目的Android ListFragment重複

這是一個擴展CourseFragment類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)); 
    } 

} 

這是從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; 
} 

而且在MainActivity的OnCreate:

@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(); 
    } 

} 

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

如果需要其他代碼來解決這個問題,請告訴我。非常感謝你的幫助!

+0

你能告訴courseArrayAdapter –

+0

的構造你得到mCourse.tostring相同的值可以請你告訴我它是什麼打印 –

+0

已更新包含 – Roc47HS

回答

0

請現在就來試試這個mCourses會有數據。我認爲它不會重複

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

我不得不的第一行代碼更改爲: '私有列表 mCourses;' 它仍然是做什麼像以前 – Roc47HS

+0

Log.d( 「DEBUGTAG」, 「課程:」 + mCourses.get(I) );你每次都在這裏獲得不同的價值嗎? –

+0

不,我得到了同樣的價值。它是最後一項的toString方法的值。 – Roc47HS