何时更新ViewPager的信息?

问题描述 投票:1回答:1

如果我有一个activity上面有viewPAger和我要显示的两组数据,最好有一个fragment并根据从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现在......:

public static HighScoresEasyFragment newInstance(int pageNumber) {
    HighScoresEasyFragment fragment = new HighScoresEasyFragment();
    Bundle args = new Bundle();
    args.putInt(ARG_PAGE, pageNumber);
    fragment.setArguments(args);
    return fragment;
}

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

android android-fragments android-viewpager
1个回答
1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.