我有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,任何想法做到這一點?或者有其他方法可以做到這一點?
任何答案將不勝感激,謝謝!
檢查此[鏈接] (http://stackoverflow.com/a/9977370/1949520)! – cylon
是的,您需要在Actvity中創建碎片對象,並使用該對象,您可以在片段中傳遞值,並在碎片中創建一個函數並傳遞該值。 –