5

私のアプリケーションでは、学生の詳細をで表示する必要がありViewPagerます。私は1つのフラグメント(たとえばStudentPageFragment)を使用し、ウィジェット初期化コードを次のonCreateView()ように記述します。

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()メソッドでは、最初の3つの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つの学生の詳細が含まれていることです。これを行うための最良の方法を教えてください。

4

1 に答える 1

3

今私の問題は、すべてのページに最初の 3 つの学生の詳細が含まれていることです。

これが発生している場合、ほとんどの場合、あなたのdisplayStudentDetails()メソッドは、見続けている最初の 3 つの生徒の詳細のみを取得しFragmentViewPager. メソッドを投稿していないため、解決策をお勧めできません。

すべての学生オブジェクトを保持する共通の ArrayList オブジェクトを維持しています。

これをどこで行い、そのリストをどのように保存しますか?

f = StudentPageFragment.newInstance(_context);

クラスには、代わりに使用する必要があるメソッドを介して/への参照があるContextため、フラグメントに を渡さないでください。FragmentContextActivitygetActivity()

次のようにフラグメントを構築する必要があります。

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

では、displayStudentPosition次のような値を取得できます。

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
        } 
        } 
}
于 2013-03-04T05:46:17.880 に答える