使用FragmentStatePagerAdapter更新ViewPager中的片段/视图

7
需要帮助解决在使用viewpager时更新页面的问题。我使用了一个简单的viewpager和FragmentStatePagerAdapter。我想做的就是访问当前的fragment/view,以便我可以更新一些文本视图。我在论坛上搜索并了解到以下几点: - 处理此问题的一种方法是在适配器的instantiateItem()回调中设置标记,并通过findViewbyTag检索视图。我无法理解如何实现这一点,而且我也不确定这是否适用于FragmentStatePagerAdapter。 - 我探索了其他在各个论坛中建议的选项,但无法使它们起作用。

我的代码与android http://developer.android.com/training/animation/screen-slide.html 中的代码非常相似。基本组件相同(包括一个带有一些显示组件(包括TextView)的Fragment activity xml、仅包含ViewPager的viewpager xml、一个Fragment类和主FragmentActivity类)。在我的FragmentActivity类中,我已将pageChangelistener添加到我的viewpager中,以便我可以在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个回答

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

我猜你想从你的活动中访问你的片段并更新视图。片段是活动的一部分,它们的视图可以被访问。片段在视图适配器中动态创建,没有直接和简单的方法来标记它们。你可以通过它的索引号简单地访问一个片段。第一个是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");

}

我不明白你是如何在第一行获取到Fragment对象的。下面是我在Fragment活动类中创建适配器的代码。 - user1938357
@user1938357,你有多少个片段?你可以用你的片段名称替换FragmentTwo。当你有一个对你的片段的引用时,你可以更新它的视图。 - Mehdi Fanai
我只有一个片段,据我所知。页面数量在onCreate中动态确定,我在“ScreenSlidePageFragment.create(position,<我想传递的其他参数>)”中传递。您可以在我的问题中的代码中看到这一点。因此,在回调onPageSelected(int position)中的任何时候,我都可以访问页码。就是在这个方法中,我想获得该页面上的文本视图。 - user1938357
我需要在新页面加载时才调用updateTextView()。因此,将该方法放置在Fragment内部将导致它仅在viewpager在以下行中创建时才起作用:“mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());”。 - user1938357

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接