2015-12-30 60 views
0

我有3個菜單(菜單1,菜單2,菜單3)。這裏是我的代碼來實現ViewPager活動:如何獲得片段對象在當前位置ViewPager

public class MyActivity .... { 

    PagerAdapter pa; 
    TabLayout tabLayout; 
    ViewPager vp; 

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

     vp = (ViewPager) findViewById(R.id.viewPager); 
     pa = new PageAdapter(getSupportFragmentManager(), getApplicationContext()); 
     vp.setAdapter(pa); 

     tabLayout = (TabLayout) findViewById(R.id.viewPagerMenu); 
     tabLayout.setTabsFromPagerAdapter(pa); 
     tabLayout.setupWithViewPager(vp); 

     vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
      @Override 
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

      } 

      @Override 
      public void onPageSelected(int position) { 

      } 

      @Override 
      public void onPageScrollStateChanged(int state) { 
       int position = vp.getCurrentItem(); 

       if(position == 0){ 
        // I want to take the fragment object that instantiated in this position, to access variable from it's object 

       } 
      } 
     }); 
    } 
} 

public class Fragment1 extends Fragment ... { 

    // I want to get Boolean variable from this fragment 

    private Boolean toggleSomething = false; 
    private Context context; 
    private String pageTitle; 

    public static Fragment1 newInstance(String pageTitle, Context context){ 
     Fragment1 frag = new Fragment1(); 
     frag1.setPageTitle(pageTitle); 
     frag1.setContext(context); 

     return frag; 
    } 

    public Boolean getToggleSomething(){ 
     return this.toggleSomething; 
    } 

    public void setToggleSomething(Boolean toggleSomething){ 
     this.toggleSomething = toggleSomething; 
    } 

    public String getPageTitle(){ 
     return this.pageTitle; 
    } 

    public void setPageTitle(String pageTitle){ 
     this.pageTitle = pageTitle; 
    } 

    public Context getContext(){ 
     return this.context; 
    } 

    public void setContext(Context context){ 
     this.context = context; 
    } 

}  

這裏是我的PageAdapter:

public class PageAdapter extends FragmentPagerAdapter { 

    private static int totalMenu = 3; 
    private Context context; 

    public PageAdapter(FragmentManager fm, Context context) { 
     super(fm); 
     this.context = context; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     switch (position){ 
      case 0: 
       return Fragment1.newInstance("Menu 1", context); 
      case 1: 
       return Fragment2.newInstance("Menu 2", context); 
      case 2: 
       return Fragment3.newInstance("Menu 3", context); 
      default: 
       return null; 
     } 
    } 

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

    @Override 
    public CharSequence getPageTitle(int position) { 
     switch (position){ 
      case 0: 
       return "Menu 1"; 
      case 1: 
       return "Menu 2"; 
      case 2: 
       return "Menu 3"; 
      default: 
       return null; 
     } 
    } 
} 

我的問題是:

我有一個片段中的布爾,我想從我的活動,值時所選擇的選項卡是第一個標籤。我怎樣才能做到這一點?

我想我需要得到片段的對象然後訪問變量與getter,任何想法做到這一點?或者有其他方法可以做到這一點?

任何答案將不勝感激,謝謝!

+0

檢查此[鏈接] (http://stackoverflow.com/a/9977370/1949520)! – cylon

+0

是的,您需要在Actvity中創建碎片對象,並使用該對象,您可以在片段中傳遞值,並在碎片中創建一個函數並傳遞該值。 –

回答

0

你必須通過對項目的布爾值選擇

 @Override 
     public void onPageSelected(int position) { 
if(case1){ return Fragment1.newInstance("Menu 1", context,BOOL_VALUE);}} 

,改變你的構造重振布爾

public Fragment1 newInstance(String pageTitle, Context context,Boolean BOOL_VALUE){ 
    Fragment1 frag = new Fragment1(); 
    frag1.setPageTitle(pageTitle); 
    frag1.setContext(context); 
    frag1.setBoolValue(BOOL_VALUE); 
    return frag; 
} 

希望這將有助於。

0

創建靜態變量

public class PublicValue{ 
    public static yourboolean = false;//default values 
} 

一個公共類中的片段,您可以將該值設置爲靜態變量

PublicValue.yourboolean = value_you_want use; 

然後用靜態變量

@Override 
      public void onPageScrollStateChanged(int state) { 
       int position = vp.getCurrentItem(); 

       if(position == 0){ 
        // I want to take the fragment object that instantiated in this position, to access variable from it's object 
        if(PublicValue.yourboolean){ 

       } 
      } 
     }); 
+0

感謝您的回答,您的回答是工作。但我試圖不使用靜態變量 –

相關問題