2

在我的申請中,我必須在ViewPager中顯示學生詳細信息。我使用的一個片段(比如StudentPageFragment)和I寫插件初始化代碼在onCreateView()像:如何在ViewPager中的所有頁面中使用單個片段?

public static Fragment newInstance(Context context) { 
    StudentPageFragment f = new StudentPageFragment(); 
    return f; 
} 

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    ViewGroup root = (ViewGroup) inflater.inflate(R.layout.stud_list_page, 
      null); 
    // initialize all widgets here 
    displayStudentDetails(); 
    return root; 
} 

protected void displayStudentDetails() { 
    ArrayList<Student>studList = User.getStudentsList(); 
    if (studList != null) { 
     int loc = (pageIndex * 3); 
     for (int i = 0; i < 3; i++) { 
      if (loc < studList.size()) { 
       // populate data in view 
      } 
      loc++; 
     } 
    } 
} 

我都保持了通用ArrayList<Student>對象保持所有的學生對象。

而在displayStudentDetails()方法中,我填充了前三個Student對象。如果我們滑動下一頁,同一個片段應該調用顯示的下一個3個Student對象。

而且在ViewPagerAdapter類:

@Override 
public Fragment getItem(int position) { 
    Fragment f = new Fragment(); 
    f = StudentPageFragment.newInstance(_context); 
    StudentPageFragment.setPageIndex(position); 
    return f; 
} 

@Override 
public int getCount() { 
    return User.getPageCount();// this will give student list size divided by 3 
} 

現在我的問題是所有網頁舉行第一次3點學生的詳細信息。請爲我提供最好的方法來做到這一點。

回答

1

現在我的問題是所有的頁面持有前3名學生的詳細信息。

如果發生這種情況,很可能是你displayStudentDetails()方法只注意到你總是看到,並考慮不走Fragment(即配備了這一立場和學生的詳細信息)的位置的前三個學生的詳細信息在ViewPager。由於您沒有發佈該方法,我無法推薦解決方案。

我一直維護一個共同的ArrayList對象,它包含所有的 學生對象。

你是從哪裏做的,你如何存儲這個列表?

f = StudentPageFragment.newInstance(_context);

請不要通過Context到您的片段作爲Fragment類有通過getActivity()方法,你應該使用一個參考Context/Activity

你應該建立片段是這樣的:

@Override 
public Fragment getItem(int position) { 
    return StudentPageFragment.newInstance(position); 
} 

其中newInstance()方法是:

public static Fragment newInstance(int position) { 
     StudentPageFragment f = new StudentPageFragment(); 
     Bundle args = new Bundle(); 
     args.putInt("position", position); 
     f.setArguments(args); 
     return f; 
} 

你會然後檢索position,並在Fragment使用它:

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    ViewGroup root = (ViewGroup) inflater.inflate(R.layout.stud_list_page, 
      container, false); 
    // initialize all widgets here   
    displayStudentDetails(getArguments().getInt("position")); 
    return root; 
} 

在當你從得到學生的數據

protected void displayStudentDetails(int position) { 
     ArrayList<Student>studList = User.getStudentsList(); 
     if (studList != null) { 
     for (int i = position; i < 3 && i < studList.size; i++) { 
      // populate data 
     } 
     } 
} 
+0

我已經發布我的displayStudentDetails() – Sridhar 2013-03-04 05:58:12

+0

在FragmentActivity,我從服務器檢索學生名單,並分析它,並保持在User類 – Sridhar 2013-03-04 05:59:55

+0

@Sridhar:210你能得到的值這樣的服務器在後臺線程上,當向用戶顯示'ViewPager'時,數據不可用,對吧? – Luksprog 2013-03-04 06:07:18

相關問題