【问题标题】:Updating fragments/views in viewpager with fragmentStatePagerAdapter使用 fragmentStatePagerAdapter 更新 viewpager 中的片段/视图
【发布时间】:2013-05-04 09:44:04
【问题描述】:

需要一些帮助来解决我在使用 viewpager 时更新页面的问题。我正在使用带有 FragmentStatePagerAdapter 的简单 viewpager。我想要做的就是访问当前的片段/视图,以便我可以更新我的片段/视图中的一些文本视图。我在论坛里搜索了一下,知道的东西很少 - 处理此问题的方法之一是在适配器的 instanceiteItem() 回调中设置标记并通过 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;
    }
}

【问题讨论】:

    标签: android android-fragments android-viewpager


    【解决方案1】:

    在您的 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-------
               }
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

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