1

このためのタイトルを書くのは難しいことでした。私が現在行っているのは、1つのFragmentクラスを再利用して、ViewPagerに多数のListFragmentsを作成することです。ListFragmentsのレイアウトはすべて同じであるため、1つのレイアウトと1つのFragmentをベースとして使用することは適切な選択のように思えます。ただし、タイトルや名前など、フラグメントごとの値を設定するために、各フラグメントのビューにアクセスできるようにしたいと思います。これには問題があり、フラグメントのonViewCreatedメソッドをオーバーライドしてTextViewにアクセスしようとすると、更新されるフラグメントはチェーンの最初のフラグメントだけであるように見えます。

さて、フラグメントをインスタンス化して接続するために私が行うことは次のとおりです。

private void initPager() {
    mFragments = new Vector<Fragment>();
    int[] listIds = 3;
    for(int i = 0; i < listIds.length; i++) {
        Fragment fragment = new ListsFragment(listIds[i]);
        mFragments.add(fragment);
    }

    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    for(int i = 0; i < mFragments.size(); i++) {
        fragmentTransaction.add(R.id.viewpager, mFragments.get(i));
    }
    fragmentTransaction.commit();

    mPagerAdapter = new ListsPagerAdapter(fragmentManager, mFragments);
    mPager = (ViewPager) super.findViewById(R.id.viewpager);
    mPager.setAdapter(mPagerAdapter);
}

フラグメントonViewCreated()コードは次のとおりです。

    @Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    TextView textListTitle = (TextView) getActivity().findViewById(R.id.text_list_title);
            String title = "test";
    textListTitle.setText(listTitle);
}

ログを見ると、各フラグメントが個別にインスタンス化されており、それぞれのライフサイクルを連続して実行していることがわかります。ただし、「テスト」文字列を取得するフラグメントは最初のフラグメントのみです。

私は何が欠けていますか?

4

1 に答える 1

0

ある種ので自分Fragmentのをインスタンス化する必要があります。FragmentPagerAdapter

于 2012-07-25T03:05:03.933 に答える