使用fragmentStatePagerAdapter更新viewpager中的片段/视图

时间:2013-05-04 09:44:04

标签: android android-fragments android-viewpager

在使用viewpager时更新页面的问题需要一些帮助。我正在使用FragmentStatePagerAdapter的简单viewpager。我想要做的就是访问当前的片段/视图,以便我可以更新片段/视图中的一些文本视图。我在论坛里四处搜索,结识了一些事情 - 处理此问题的方法之一是在适配器的instantiateItem()调用中设置标记,并通过findViewbyTag检索视图。我无法理解如何实现这一点,我也不确定它是否适用于FragmentStatePagerAdapter。 - 我在各种论坛中探讨了其他选项,但无法使它们发挥作用。

我的代码与android http://developer.android.com/training/animation/screen-slide.html中的代码非常相似。基本组件是相同的(片段活动xml,其中一些显示组件包括textview,viewpager xml只有一个视图分页器,一个Fragment类和主要的FragmentActivity类)。在我的FragmentActivity类中,我向viewpager添加了一个pageChangelistener,以便在onPageSelected()期间进行textview更改。

感谢任何帮助。

添加代码供参考。

Public class myActivity extends FragmentActivity
  //Variable declarations
  protected void onCreate(Bundle savedInstanceState) {
  ViewPager mPager = (ViewPager) findViewById(R.id.pager);
  mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
  mPager.setAdapter(mPagerAdapter);
  View CurrView;

  OnPageChangeListener pageChangelistener = new OnPageChangeListener() {
    @Override
    public void onPageSelected(int pageSelected) {
       doTextViewChnges();//access the text view and update it based on pageSelected

   ---THIS IS WHERE I AM STUCK IN TRYING TO GET THE TEXTVIEW IN MY CURRENT FRAGMWNT/VIEW-------
   }

  mPager.setOnPageChangeListener(pageChangelistener);
 }
  private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter { 
    public ScreenSlidePagerAdapter(android.support.v4.app.FragmentManager  fm) {
        super(fm);
    }

    @Override
    public android.support.v4.app.Fragment getItem(int position) { 
        return ScreenSlidePageFragment.create(position, <other parameters I want to pass>);
    }

    @Override
    public int getCount() {
        return NUM_PAGES;
    }
}

2 个答案:

答案 0 :(得分:2)

OnPageChangeListener中的


      OnPageChangeListener pageChangelistener = new OnPageChangeListener() {
            @Override
            public void onPageSelected(int pageSelected) {
 ScreenSlidePageFragment currentFragment = (ScreenSlidePageFragment) mPagerAdapter.getItem(pageSelected)
               doTextViewChnges();//access the text view and update it based on pageSelected

           ---THIS IS WHERE I AM STUCK IN TRYING TO GET THE TEXTVIEW IN MY CURRENT FRAGMWNT/VIEW-------
           }

答案 1 :(得分:-1)

我假设你想从你的活动中访问你的片段并更新视图。片段是活动的一部分,它们的视图可以被它们访问。片段是在viewadapters中动态创建的,没有直接且简单的方法来标记它们。您可以通过索引号简单地访问片段。第一个是0秒,一个是1,依此类推......

//access your fragment(in your case your first fragment)
//this part should be inside your doTextViewChnges()
Fragment fragment = (Fragment ) adapterViewPager
            .getFragment(0);
    if (fragment  != null) {
//call a public method inside your fragment to update your text view
        fragment .updateYourTextView();
    }

编辑:在您的片段中创建以下方法并从那里更新您的textview。

void updateYourTextView() {
    yourTextView.setText("yourtext");

}