何时更新ViewPager的信息?

时间:2014-08-01 18:07:26

标签: android android-fragments android-viewpager

如果我在activity上加viewPAger并且我要显示两组数据,那么最好有一个fragment并将信息加载到{{1基于从textViews传递的位置或更好的位置来创建多个片段并加载所需的片段? 任何帮助是极大的赞赏。

activity

或者从我的public class testFragment extends Fragment { private static final String ARG_PAGE = "pageNumber"; private static final int DEFAULT_INT = 0; TextView header, sd1; int h1, page = 0; public testFragment (){ } public testFragment newInstance(int pageNumber) { testFragment fragment = new testFragment (); Bundle args = new Bundle(); args.putInt(ARG_PAGE, pageNumber); fragment.setArguments(args); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { page = getArguments().getInt(ARG_PAGE); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_high_scores_page, container, false); return rootView; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); header = (TextView) getActivity().findViewById(R.id.modes_header); sd1 = (TextView) getActivity().findViewById(R.id.stat_det_1); switch (page) { case 1: header.setText(R.string.easy_mode); h1 = DEFAULT_INT; sh1 = DEFAULT_INT; sd1.setText(String.valueOf(h1)); break; case 2: header.setText(R.string.medium_mode); h1 = DEFAULT_INT + 1; sh1 = DEFAULT_INT + 1; sd1.setText(String.valueOf(h1)); break; default: header.setText(R.string.action_restart); h1 = DEFAULT_INT; sh1 = DEFAULT_INT; sd1.setText(String.valueOf(h1)); break; } } public void setTextViewInfo(){ sd1.setText(String.valueOf(h1)); } } 发送信息并加载一个或多个activity会更好吗?

fragments

编辑:

在我的适配器中,我刚试过

public class testActivity extends FragmentActivity  {

    private static final int NUM_PAGES = 8;
    private ViewPager mPager;
    private PagerAdapter mPagerAdapter;

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

        // Instantiate a ViewPager and a PagerAdapter.
        mPager = (ViewPager) findViewById(R.id.high_scores_pager);
        mPagerAdapter = new testActivity (getSupportFragmentManager());
        mPager.setAdapter(mPagerAdapter);
    }

    @Override
    public void onBackPressed() {
        if (mPager.getCurrentItem() == 0) {
            super.onBackPressed();
        } else {
            mPager.setCurrentItem(mPager.getCurrentItem() - 1);
        }
    }

    private class testActivityAdapter extends FragmentStatePagerAdapter {
        public testActivityAdapter (FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            switch (position) {
                case 0:
                    testFragment tf1 = new testFragment ();
                    notifyDataSetChanged();
                    return easy.newInstance(position);
                case 1:
                    testFragment2 tf2 = new testFragment ();
                    notifyDataSetChanged();
                    return medium.newInstance(position);

                default:
                    testFragment d = new testFragment ();
                    return d.newInstance();
            }
        }

        @Override
        public int getItemPosition(Object object) {
            return super.getItemPosition(object);
        }

        @Override
        public int getCount() {
            return NUM_PAGES;
        }
    }
}
嗯,但它没有加载任何东西......我的@Override public Fragment getItem(int position) { switch (position) { case 0: return HighScoresEasyFragment.newInstance(position); case 1: return HighScoresMediumFragment.newInstance(position); case 2: return HighScoresExpertFragment.newInstance(position); case 3: return HighScoresBrainFartFragment.newInstance(position); case 4: return HighScoresClassicFragment.newInstance(position); case 5: return HighScoresPuzzleFragment.newInstance(position); case 6: return HighScoresPerfectFragment.newInstance(position); case 7: return HighScoresPowerFragment.newInstance(position); default: return HighScoresEasyFragment.newInstance(position); } 现在......:

constructor

它加载了第一页的标题,但没有数据,并且它没有加载第二个到第8个片段的任何内容......

1 个答案:

答案 0 :(得分:1)

您应该使用适配器引用从您的活动中调用notifyDataChanged()。基本上,notifyDataChanged只是告诉你的适配器中的所有片段数据已经改变,他们应该自己刷新。从getItem()方法中删除notifyDataChanged,并在更改活动中的数据时将其放入。